1 | #include <stdio.h> |
---|
2 | #include <stdlib.h> |
---|
3 | #include <string.h> |
---|
4 | |
---|
5 | #include "protos.h" |
---|
6 | #include "registry.h" |
---|
7 | #include "data.h" |
---|
8 | |
---|
9 | /* For detecting variables that are members of a derived type */ |
---|
10 | #define NULLCHARPTR (char *) 0 |
---|
11 | static int parent_type; |
---|
12 | |
---|
13 | int |
---|
14 | gen_halos ( char * dirname ) |
---|
15 | { |
---|
16 | node_t * p, * q ; |
---|
17 | node_t * dimd ; |
---|
18 | char commname[NAMELEN] ; |
---|
19 | char fname[NAMELEN] ; |
---|
20 | char tmp[4096], tmp2[4096], tmp3[4096] ; |
---|
21 | char commuse[4096] ; |
---|
22 | int maxstenwidth, stenwidth ; |
---|
23 | FILE * fp ; |
---|
24 | char * t1, * t2 ; |
---|
25 | char * pos1 , * pos2 ; |
---|
26 | char indices[NAMELEN], post[NAMELEN], varref[NAMELEN] ; |
---|
27 | int zdex ; |
---|
28 | |
---|
29 | if ( dirname == NULL ) return(1) ; |
---|
30 | |
---|
31 | for ( p = Halos ; p != NULL ; p = p->next ) |
---|
32 | { |
---|
33 | strcpy( commname, p->name ) ; |
---|
34 | make_upper_case(commname) ; |
---|
35 | if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s.inc",dirname,commname) ; } |
---|
36 | else { sprintf(fname,"%s.inc",commname) ; } |
---|
37 | if ((fp = fopen( fname , "w" )) == NULL ) |
---|
38 | { |
---|
39 | fprintf(stderr,"WARNING: gen_halos in registry cannot open %s for writing\n",fname ) ; |
---|
40 | continue ; |
---|
41 | } |
---|
42 | /* get maximum stencil width */ |
---|
43 | maxstenwidth = 0 ; |
---|
44 | strcpy( tmp, p->comm_define ) ; |
---|
45 | t1 = strtok_rentr( tmp , "; " , &pos1 ) ; |
---|
46 | while ( t1 != NULL ) |
---|
47 | { |
---|
48 | strcpy( tmp2 , t1 ) ; |
---|
49 | if (( t2 = strtok_rentr( tmp2 , ": " , &pos2 )) == NULL ) |
---|
50 | { fprintf(stderr,"unparseable description for halo %s\n", commname ) ; exit(1) ; } |
---|
51 | stenwidth = atoi (t2) ; |
---|
52 | if ( stenwidth == 0 ) |
---|
53 | { fprintf(stderr,"* unparseable description for halo %s\n", commname ) ; exit(1) ; } |
---|
54 | if ( stenwidth > maxstenwidth ) maxstenwidth = stenwidth ; |
---|
55 | t1 = strtok_rentr( NULL , "; " , &pos1 ) ; |
---|
56 | } |
---|
57 | print_warning(fp,fname) ; |
---|
58 | fprintf(fp,"#ifndef DATA_CALLS_INCLUDED\n") ; |
---|
59 | fprintf(fp,"--- DELIBERATE SYNTAX ERROR: THIS ROUTINE SHOULD INCLUDE \"%s_data_calls.inc\"\n",p->use+4) ; |
---|
60 | fprintf(fp," BECAUSE IT CONTAINS AN RSL HALO OPERATION\n" ) ; |
---|
61 | fprintf(fp,"#endif\n") ; |
---|
62 | |
---|
63 | fprintf(fp,"IF ( grid%%comms( %s ) == invalid_message_value ) THEN\n",commname ) ; |
---|
64 | fprintf(fp," CALL wrf_debug ( 50 , 'set up halo %s' )\n",commname ) ; |
---|
65 | fprintf(fp," CALL setup_halo_rsl( grid )\n" ) ; |
---|
66 | fprintf(fp," CALL reset_msgs_%dpt\n", maxstenwidth ) ; |
---|
67 | |
---|
68 | /* pass through description again now and generate the calls */ |
---|
69 | strcpy( tmp, p->comm_define ) ; |
---|
70 | strcpy( commuse, p->use ) ; |
---|
71 | t1 = strtok_rentr( tmp , "; " , &pos1 ) ; |
---|
72 | while ( t1 != NULL ) |
---|
73 | { |
---|
74 | strcpy( tmp2 , t1 ) ; |
---|
75 | if (( t2 = strtok_rentr( tmp2 , ": " , &pos2 )) == NULL ) |
---|
76 | { fprintf(stderr,"unparseable description for halo %s\n", commname ) ; continue ; } |
---|
77 | stenwidth = atoi (t2) ; |
---|
78 | t2 = strtok_rentr(NULL,", ", &pos2) ; |
---|
79 | |
---|
80 | while ( t2 != NULL ) |
---|
81 | { |
---|
82 | if ((q = get_entry_r( t2, commuse, Domain.fields )) == NULL ) |
---|
83 | { |
---|
84 | fprintf(stderr,"WARNING 1 : %s in halo spec %s (%s) is not defined in registry.\n",t2,commname, commuse) ; |
---|
85 | } |
---|
86 | else |
---|
87 | { |
---|
88 | |
---|
89 | strcpy( varref, t2 ) ; |
---|
90 | if ( q->node_kind & FIELD && ! (q->node_kind & I1) ) { |
---|
91 | if ( !strncmp( q->use, "dyn_", 4 )) { |
---|
92 | char * core ; |
---|
93 | core = q->use+4 ; |
---|
94 | sprintf(varref,"grid%%%s_%s",core,t2) ; |
---|
95 | } else { |
---|
96 | sprintf(varref,"grid%%%s",t2) ; |
---|
97 | } |
---|
98 | } |
---|
99 | |
---|
100 | if ( strcmp( q->type->name, "real") && strcmp( q->type->name, "integer") && strcmp( q->type->name, "doubleprecision") ) |
---|
101 | { |
---|
102 | fprintf(stderr,"WARNING: only type 'real', 'doubleprecision', or 'integer' can be part of halo exchange. %s in %s is %s\n",t2,commname,q->type->name) ; |
---|
103 | } |
---|
104 | else if ( q->boundary_array ) |
---|
105 | { |
---|
106 | fprintf(stderr,"WARNING: boundary array %s cannot be member of halo spec %s.\n",t2,commname) ; |
---|
107 | } |
---|
108 | else |
---|
109 | { |
---|
110 | if ( q->node_kind & FOURD ) |
---|
111 | { |
---|
112 | node_t *member ; |
---|
113 | zdex = get_index_for_coord( q , COORD_Z ) ; |
---|
114 | if ( zdex >=1 && zdex <= 3 ) |
---|
115 | { |
---|
116 | for ( member = q->members ; member != NULL ; member = member->next ) |
---|
117 | { |
---|
118 | if ( strcmp( member->name, "-" ) ) |
---|
119 | { |
---|
120 | fprintf(fp," if ( P_%s .GT. 1 ) CALL add_msg_%dpt_%s ( %s ( grid%%sm31,grid%%sm32,grid%%sm33,P_%s), glen(%d) )\n", |
---|
121 | member->name, stenwidth, q->type->name, t2 , member->name, zdex+1 ) ; |
---|
122 | } |
---|
123 | } |
---|
124 | } |
---|
125 | else |
---|
126 | { |
---|
127 | fprintf(stderr,"WARNING: %d some dimension info missing for 4d array %s\n",zdex,t2) ; |
---|
128 | } |
---|
129 | } |
---|
130 | else |
---|
131 | { |
---|
132 | strcpy (indices,""); |
---|
133 | if ( sw_deref_kludge ) /* && strchr (t2, '%') != NULLCHARPTR ) */ |
---|
134 | { |
---|
135 | sprintf(post,")") ; |
---|
136 | sprintf(indices, "%s",index_with_firstelem("(","",tmp3,q,post)) ; |
---|
137 | } |
---|
138 | dimd = get_dimnode_for_coord( q , COORD_Z ) ; |
---|
139 | zdex = get_index_for_coord( q , COORD_Z ) ; |
---|
140 | if ( dimd != NULL ) |
---|
141 | { |
---|
142 | char dimstrg[256] ; |
---|
143 | |
---|
144 | if ( dimd->len_defined_how == DOMAIN_STANDARD ) |
---|
145 | sprintf(dimstrg,"(glen(%d))",zdex+1) ; |
---|
146 | else if ( dimd->len_defined_how == NAMELIST ) |
---|
147 | { |
---|
148 | if ( !strcmp(dimd->assoc_nl_var_s,"1") ) |
---|
149 | sprintf(dimstrg,"config_flags%%%s",dimd->assoc_nl_var_e) ; |
---|
150 | else |
---|
151 | sprintf(dimstrg,"(config_flags%%%s - config_flags%%%s + 1)",dimd->assoc_nl_var_e,dimd->assoc_nl_var_s) ; |
---|
152 | } |
---|
153 | else if ( dimd->len_defined_how == CONSTANT ) |
---|
154 | sprintf(dimstrg,"(%d - %d + 1)",dimd->coord_end,dimd->coord_start) ; |
---|
155 | |
---|
156 | fprintf(fp," CALL add_msg_%dpt_%s ( %s%s , %s )\n", stenwidth, q->type->name, varref, indices, dimstrg ) ; |
---|
157 | } |
---|
158 | else if ( q->ndims == 2 ) /* 2d */ |
---|
159 | { |
---|
160 | fprintf(fp," CALL add_msg_%dpt_%s ( %s%s , %s )\n", stenwidth, q->type->name, varref, indices, "1" ) ; |
---|
161 | } |
---|
162 | } |
---|
163 | } |
---|
164 | q->subject_to_communication = 1 ; /* Indicate that this field may be communicated */ |
---|
165 | } |
---|
166 | t2 = strtok_rentr( NULL , ", " , &pos2 ) ; |
---|
167 | } |
---|
168 | t1 = strtok_rentr( NULL , "; " , &pos1 ) ; |
---|
169 | } |
---|
170 | fprintf(fp," CALL stencil_%dpt ( grid%%domdesc , grid%%comms ( %s ) )\n", maxstenwidth , commname ) ; |
---|
171 | fprintf(fp,"ENDIF\n") ; |
---|
172 | fprintf(fp," CALL wrf_debug ( 50 , 'exchange halo %s' )\n",commname ) ; |
---|
173 | fprintf(fp,"CALL rsl_exch_stencil ( grid%%domdesc , grid%%comms( %s ) )\n", commname ) ; |
---|
174 | |
---|
175 | close_the_file(fp) ; |
---|
176 | } |
---|
177 | return(0) ; |
---|
178 | } |
---|
179 | |
---|
180 | int |
---|
181 | gen_periods ( char * dirname ) |
---|
182 | { |
---|
183 | node_t * p, * q ; |
---|
184 | char commname[NAMELEN] ; |
---|
185 | char fname[NAMELEN] ; |
---|
186 | char indices[NAMELEN], post[NAMELEN], varref[NAMELEN] ; |
---|
187 | char tmp[4096], tmp2[4096], tmp3[4096], commuse[4096] ; |
---|
188 | int maxperwidth, perwidth ; |
---|
189 | FILE * fp ; |
---|
190 | char * t1, * t2 ; |
---|
191 | char * pos1 , * pos2 ; |
---|
192 | node_t * dimd ; |
---|
193 | int zdex ; |
---|
194 | |
---|
195 | if ( dirname == NULL ) return(1) ; |
---|
196 | |
---|
197 | for ( p = Periods ; p != NULL ; p = p->next ) |
---|
198 | { |
---|
199 | strcpy( commname, p->name ) ; |
---|
200 | make_upper_case(commname) ; |
---|
201 | if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s.inc",dirname,commname) ; } |
---|
202 | else { sprintf(fname,"%s.inc",commname) ; } |
---|
203 | if ((fp = fopen( fname , "w" )) == NULL ) |
---|
204 | { |
---|
205 | fprintf(stderr,"WARNING: gen_periods in registry cannot open %s for writing\n",fname ) ; |
---|
206 | continue ; |
---|
207 | } |
---|
208 | /* get maximum stencil width */ |
---|
209 | maxperwidth = 0 ; |
---|
210 | strcpy( tmp, p->comm_define ) ; |
---|
211 | t1 = strtok_rentr( tmp , ";" , &pos1 ) ; |
---|
212 | while ( t1 != NULL ) |
---|
213 | { |
---|
214 | strcpy( tmp2 , t1 ) ; |
---|
215 | if (( t2 = strtok_rentr( tmp2 , ":" , &pos2 )) == NULL ) |
---|
216 | { fprintf(stderr,"unparseable description for halo %s\n", commname ) ; exit(1) ; } |
---|
217 | perwidth = atoi (t2) ; |
---|
218 | if ( perwidth > maxperwidth ) maxperwidth = perwidth ; |
---|
219 | t1 = strtok_rentr( NULL , ";" , &pos1 ) ; |
---|
220 | } |
---|
221 | print_warning(fp,fname) ; |
---|
222 | |
---|
223 | fprintf(fp,"#ifndef DATA_CALLS_INCLUDED\n") ; |
---|
224 | fprintf(fp,"--- DELIBERATE SYNTAX ERROR: THIS ROUTINE SHOULD INCLUDE \"%s_data_calls.inc\"\n",p->use+4) ; |
---|
225 | fprintf(fp," BECAUSE IT CONTAINS AN RSL PERIOD OPERATION\n" ) ; |
---|
226 | fprintf(fp,"#endif\n") ; |
---|
227 | fprintf(fp,"IF ( grid%%comms( %s ) == invalid_message_value .AND. (config_flags%%periodic_x .OR. config_flags%%periodic_y )) THEN\n",commname ) ; |
---|
228 | |
---|
229 | fprintf(fp," CALL wrf_debug ( 50 , 'setting up period %s' )\n",commname ) ; |
---|
230 | fprintf(fp," CALL setup_period_rsl( grid )\n" ) ; |
---|
231 | fprintf(fp," CALL reset_period\n") ; |
---|
232 | |
---|
233 | /* pass through description again now and generate the calls */ |
---|
234 | strcpy( tmp, p->comm_define ) ; |
---|
235 | strcpy( commuse, p->use ) ; |
---|
236 | t1 = strtok_rentr( tmp , ";" , &pos1 ) ; |
---|
237 | while ( t1 != NULL ) |
---|
238 | { |
---|
239 | strcpy( tmp2 , t1 ) ; |
---|
240 | if (( t2 = strtok_rentr( tmp2 , ":" , &pos2 )) == NULL ) |
---|
241 | { fprintf(stderr,"unparseable description for period %s\n", commname ) ; continue ; } |
---|
242 | perwidth = atoi (t2) ; |
---|
243 | t2 = strtok_rentr(NULL,",", &pos2) ; |
---|
244 | while ( t2 != NULL ) |
---|
245 | { |
---|
246 | if ((q = get_entry_r( t2, commuse, Domain.fields )) == NULL ) |
---|
247 | { |
---|
248 | fprintf(stderr,"WARNING 2 : %s in period spec %s is not defined in registry.\n",t2,commname) ; |
---|
249 | } |
---|
250 | else |
---|
251 | { |
---|
252 | if ( q->boundary_array ) |
---|
253 | { |
---|
254 | fprintf(stderr,"WARNING: boundary array %s cannot be member of period spec %s.\n",t2,commname) ; |
---|
255 | } |
---|
256 | else |
---|
257 | { |
---|
258 | |
---|
259 | strcpy( varref, t2 ) ; |
---|
260 | if ( q->node_kind & FIELD && ! (q->node_kind & I1) ) { |
---|
261 | if ( !strncmp( q->use, "dyn_", 4 )) { |
---|
262 | char * core ; |
---|
263 | core = q->use+4 ; |
---|
264 | sprintf(varref,"grid%%%s_%s",core,t2) ; |
---|
265 | } else { |
---|
266 | sprintf(varref,"grid%%%s",t2) ; |
---|
267 | } |
---|
268 | } |
---|
269 | |
---|
270 | if ( q->node_kind & FOURD ) |
---|
271 | { |
---|
272 | node_t *member ; |
---|
273 | zdex = get_index_for_coord( q , COORD_Z ) ; |
---|
274 | if ( zdex >=1 && zdex <= 3 ) |
---|
275 | { |
---|
276 | for ( member = q->members ; member != NULL ; member = member->next ) |
---|
277 | { |
---|
278 | if ( strcmp( member->name, "-" ) ) |
---|
279 | { |
---|
280 | fprintf(fp," if ( P_%s .GT. 1 ) CALL add_msg_period_%s ( %s ( grid%%sm31,grid%%sm32,grid%%sm33,P_%s), glen(%d) )\n", |
---|
281 | member->name, q->type->name, t2 , member->name, zdex+1 ) ; |
---|
282 | } |
---|
283 | } |
---|
284 | } |
---|
285 | else |
---|
286 | { |
---|
287 | fprintf(stderr,"WARNING: %d some dimension info missing for 4d array %s\n",zdex,t2) ; |
---|
288 | } |
---|
289 | } |
---|
290 | else |
---|
291 | { |
---|
292 | strcpy (indices,""); |
---|
293 | if ( sw_deref_kludge ) /* && strchr (t2, '%') != NULLCHARPTR ) */ |
---|
294 | { |
---|
295 | sprintf(post,")") ; |
---|
296 | sprintf(indices, "%s",index_with_firstelem("(","",tmp3,q,post)) ; |
---|
297 | } |
---|
298 | dimd = get_dimnode_for_coord( q , COORD_Z ) ; |
---|
299 | zdex = get_index_for_coord( q , COORD_Z ) ; |
---|
300 | if ( dimd != NULL ) |
---|
301 | { |
---|
302 | char dimstrg[256] ; |
---|
303 | |
---|
304 | if ( dimd->len_defined_how == DOMAIN_STANDARD ) |
---|
305 | sprintf(dimstrg,"(glen(%d))",zdex+1) ; |
---|
306 | else if ( dimd->len_defined_how == NAMELIST ) |
---|
307 | { |
---|
308 | if ( !strcmp(dimd->assoc_nl_var_s,"1") ) |
---|
309 | sprintf(dimstrg,"config_flags%%%s",dimd->assoc_nl_var_e) ; |
---|
310 | else |
---|
311 | sprintf(dimstrg,"(config_flags%%%s - config_flags%%%s + 1)",dimd->assoc_nl_var_e,dimd->assoc_nl_var_s) ; |
---|
312 | } |
---|
313 | else if ( dimd->len_defined_how == CONSTANT ) |
---|
314 | sprintf(dimstrg,"(%d - %d + 1)",dimd->coord_end,dimd->coord_start) ; |
---|
315 | |
---|
316 | fprintf(fp," CALL add_msg_period_%s ( %s%s , %s )\n", q->type->name, varref, indices, dimstrg ) ; |
---|
317 | } |
---|
318 | else if ( q->ndims == 2 ) /* 2d */ |
---|
319 | { |
---|
320 | fprintf(fp," CALL add_msg_period_%s ( %s%s , %s )\n", q->type->name, varref, indices, "1" ) ; |
---|
321 | } |
---|
322 | } |
---|
323 | } |
---|
324 | q->subject_to_communication = 1 ; /* Indicate that this field may be communicated */ |
---|
325 | } |
---|
326 | t2 = strtok_rentr( NULL , "," , &pos2 ) ; |
---|
327 | } |
---|
328 | t1 = strtok_rentr( NULL , ";" , &pos1 ) ; |
---|
329 | } |
---|
330 | fprintf(fp," CALL period_def ( grid%%domdesc , grid%%comms ( %s ) , %d )\n",commname , maxperwidth ) ; |
---|
331 | fprintf(fp,"ENDIF\n") ; |
---|
332 | fprintf(fp,"IF ( config_flags%%periodic_x ) THEN\n") ; |
---|
333 | fprintf(fp," CALL wrf_debug ( 50 , 'exchanging period %s on x' )\n",commname ) ; |
---|
334 | fprintf(fp," CALL rsl_exch_period ( grid%%domdesc , grid%%comms( %s ) , x_period_flag )\n",commname ) ; |
---|
335 | fprintf(fp,"END IF\n") ; |
---|
336 | fprintf(fp,"IF ( config_flags%%periodic_y ) THEN\n") ; |
---|
337 | fprintf(fp," CALL wrf_debug ( 50 , 'exchanging period %s on y' )\n",commname ) ; |
---|
338 | fprintf(fp," CALL rsl_exch_period ( grid%%domdesc , grid%%comms( %s ) , y_period_flag )\n",commname ) ; |
---|
339 | fprintf(fp,"END IF\n") ; |
---|
340 | |
---|
341 | close_the_file(fp) ; |
---|
342 | } |
---|
343 | return(0) ; |
---|
344 | } |
---|
345 | |
---|
346 | int |
---|
347 | gen_xposes ( char * dirname ) |
---|
348 | { |
---|
349 | node_t * p, * q ; |
---|
350 | char commname[NAMELEN] ; |
---|
351 | char fname[NAMELEN] ; |
---|
352 | char tmp[4096], tmp2[4096], tmp3[4096] ; |
---|
353 | char commuse[4096] ; |
---|
354 | FILE * fp ; |
---|
355 | char * t1, * t2 ; |
---|
356 | char * pos1 , * pos2 ; |
---|
357 | char *xposedir[] = { "z2x" , "x2z" , "x2y" , "y2x" , "z2y" , "y2z" , 0L } ; |
---|
358 | char ** x ; |
---|
359 | char indices[NAMELEN], post[NAMELEN], varname[NAMELEN], varref[NAMELEN] ; |
---|
360 | |
---|
361 | if ( dirname == NULL ) return(1) ; |
---|
362 | |
---|
363 | for ( p = Xposes ; p != NULL ; p = p->next ) |
---|
364 | { |
---|
365 | for ( x = xposedir ; *x ; x++ ) |
---|
366 | { |
---|
367 | strcpy( commname, p->name ) ; |
---|
368 | make_upper_case(commname) ; |
---|
369 | if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s_%s.inc",dirname,commname, *x) ; } |
---|
370 | else { sprintf(fname,"%s_%s.inc",commname,*x) ; } |
---|
371 | if ((fp = fopen( fname , "w" )) == NULL ) |
---|
372 | { |
---|
373 | fprintf(stderr,"WARNING: gen_halos in registry cannot open %s for writing\n",fname ) ; |
---|
374 | continue ; |
---|
375 | } |
---|
376 | |
---|
377 | print_warning(fp,fname) ; |
---|
378 | fprintf(fp,"#ifndef DATA_CALLS_INCLUDED\n") ; |
---|
379 | fprintf(fp,"--- DELIBERATE SYNTAX ERROR: THIS ROUTINE SHOULD INCLUDE \"%s_data_calls.inc\"\n",p->use+4) ; |
---|
380 | fprintf(fp," BECAUSE IT CONTAINS AN RSL TRANSPOSE OPERATION\n" ) ; |
---|
381 | fprintf(fp,"#endif\n") ; |
---|
382 | fprintf(fp,"IF ( grid%%comms( %s ) == invalid_message_value ) THEN\n",commname ) ; |
---|
383 | |
---|
384 | fprintf(fp," CALL wrf_debug ( 50 , 'setting up xpose %s' )\n",commname ) ; |
---|
385 | fprintf(fp," CALL setup_xpose_rsl( grid )\n") ; |
---|
386 | fprintf(fp," CALL reset_msgs_xpose\n" ) ; |
---|
387 | |
---|
388 | strcpy( tmp, p->comm_define ) ; |
---|
389 | strcpy( commuse, p->use ) ; |
---|
390 | t1 = strtok_rentr( tmp , ";" , &pos1 ) ; |
---|
391 | while ( t1 != NULL ) |
---|
392 | { |
---|
393 | strcpy( tmp2 , t1 ) ; |
---|
394 | |
---|
395 | /* Z array */ |
---|
396 | t2 = strtok_rentr(tmp2,",", &pos2) ; |
---|
397 | if ((q = get_entry_r( t2, commuse, Domain.fields )) == NULL ) |
---|
398 | { fprintf(stderr,"WARNING 3 : %s in xpose spec %s (%s) is not defined in registry.\n",t2,commname,commuse) ; goto skiperific ; } |
---|
399 | strcpy( varref, t2 ) ; |
---|
400 | if ( q->node_kind & FIELD && ! (q->node_kind & I1) ) { |
---|
401 | if ( !strncmp( q->use, "dyn_", 4 )) { |
---|
402 | char * core ; |
---|
403 | core = q->use+4 ; |
---|
404 | sprintf(varref,"grid%%%s_%s",core,t2) ; |
---|
405 | } else { |
---|
406 | sprintf(varref,"grid%%%s",t2) ; |
---|
407 | } |
---|
408 | } |
---|
409 | if ( q->proc_orient != ALL_Z_ON_PROC ) |
---|
410 | { fprintf(stderr,"WARNING: %s in xpose spec %s is not ALL_Z_ON_PROC.\n",t2,commname) ; goto skiperific ; } |
---|
411 | if ( q->ndims != 3 ) |
---|
412 | { fprintf(stderr,"WARNING: boundary array %s must be 3D to be member of xpose spec %s.\n",t2,commname) ; goto skiperific ; } |
---|
413 | if ( q->boundary_array ) |
---|
414 | { fprintf(stderr,"WARNING: boundary array %s cannot be member of xpose spec %s.\n",t2,commname) ; goto skiperific ; } |
---|
415 | strcpy (indices,""); |
---|
416 | if ( sw_deref_kludge && strchr (t2, '%') != NULLCHARPTR ) |
---|
417 | { |
---|
418 | sprintf(post,")") ; |
---|
419 | sprintf(indices, "%s",index_with_firstelem("(","",tmp3,q,post)) ; |
---|
420 | } |
---|
421 | fprintf(fp," CALL add_msg_xpose_%s ( %s%s ,", q->type->name, varref,indices ) ; |
---|
422 | q->subject_to_communication = 1 ; /* Indicate that this field may be communicated */ |
---|
423 | |
---|
424 | /* X array */ |
---|
425 | t2 = strtok_rentr( NULL , "," , &pos2 ) ; |
---|
426 | if ((q = get_entry_r( t2, commuse, Domain.fields )) == NULL ) |
---|
427 | { fprintf(stderr,"WARNING 4 : %s in xpose spec %s (%s) is not defined in registry.\n",t2,commname,commuse) ; goto skiperific ; } |
---|
428 | strcpy( varref, t2 ) ; |
---|
429 | if ( q->node_kind & FIELD && ! (q->node_kind & I1) ) { |
---|
430 | if ( !strncmp( q->use, "dyn_", 4 )) { |
---|
431 | char * core ; |
---|
432 | core = q->use+4 ; |
---|
433 | sprintf(varref,"grid%%%s_%s",core,t2) ; |
---|
434 | } else { |
---|
435 | sprintf(varref,"grid%%%s",t2) ; |
---|
436 | } |
---|
437 | } |
---|
438 | if ( q->proc_orient != ALL_X_ON_PROC ) |
---|
439 | { fprintf(stderr,"WARNING: %s in xpose spec %s is not ALL_X_ON_PROC.\n",t2,commname) ; goto skiperific ; } |
---|
440 | if ( q->ndims != 3 ) |
---|
441 | { fprintf(stderr,"WARNING: boundary array %s must be 3D to be member of xpose spec %s.\n",t2,commname) ; goto skiperific ; } |
---|
442 | if ( q->boundary_array ) |
---|
443 | { fprintf(stderr,"WARNING: boundary array %s cannot be member of xpose spec %s.\n",t2,commname) ; goto skiperific ; } |
---|
444 | strcpy (indices,""); |
---|
445 | if ( sw_deref_kludge && strchr (t2, '%') != NULLCHARPTR ) |
---|
446 | { |
---|
447 | sprintf(post,")") ; |
---|
448 | sprintf(indices, "%s",index_with_firstelem("(","",tmp3,q,post)) ; |
---|
449 | } |
---|
450 | fprintf(fp," %s%s ,", varref, indices ) ; |
---|
451 | q->subject_to_communication = 1 ; /* Indicate that this field may be communicated */ |
---|
452 | |
---|
453 | /* Y array */ |
---|
454 | t2 = strtok_rentr( NULL , "," , &pos2 ) ; |
---|
455 | if ((q = get_entry_r( t2, commuse, Domain.fields )) == NULL ) |
---|
456 | { fprintf(stderr,"WARNING 5 : %s in xpose spec %s (%s)is not defined in registry.\n",t2,commname,commuse) ; goto skiperific ; } |
---|
457 | strcpy( varref, t2 ) ; |
---|
458 | if ( q->node_kind & FIELD && ! (q->node_kind & I1) ) { |
---|
459 | if ( !strncmp( q->use, "dyn_", 4 )) { |
---|
460 | char * core ; |
---|
461 | core = q->use+4 ; |
---|
462 | sprintf(varref,"grid%%%s_%s",core,t2) ; |
---|
463 | } else { |
---|
464 | sprintf(varref,"grid%%%s",t2) ; |
---|
465 | } |
---|
466 | } |
---|
467 | if ( q->proc_orient != ALL_Y_ON_PROC ) |
---|
468 | { fprintf(stderr,"WARNING: %s in xpose spec %s is not ALL_Y_ON_PROC.\n",t2,commname) ; goto skiperific ; } |
---|
469 | if ( q->ndims != 3 ) |
---|
470 | { fprintf(stderr,"WARNING: boundary array %s must be 3D to be member of xpose spec %s.\n",t2,commname) ; goto skiperific ; } |
---|
471 | if ( q->boundary_array ) |
---|
472 | { fprintf(stderr,"WARNING: boundary array %s cannot be member of xpose spec %s.\n",t2,commname) ; goto skiperific ; } |
---|
473 | strcpy (indices,""); |
---|
474 | if ( sw_deref_kludge && strchr (t2, '%') != NULLCHARPTR ) |
---|
475 | { |
---|
476 | sprintf(post,")") ; |
---|
477 | sprintf(indices, "%s",index_with_firstelem("(","",tmp3,q,post)) ; |
---|
478 | } |
---|
479 | fprintf(fp," %s%s , 3 )\n", varref, indices ) ; |
---|
480 | q->subject_to_communication = 1 ; /* Indicate that this field may be communicated */ |
---|
481 | t1 = strtok_rentr( NULL , ";" , &pos1 ) ; |
---|
482 | } |
---|
483 | fprintf(fp," CALL define_xpose ( grid%%domdesc , grid%%comms ( %s ) )\n", commname ) ; |
---|
484 | fprintf(fp,"ENDIF\n") ; |
---|
485 | fprintf(fp,"CALL wrf_debug ( 50 , 'calling wrf_dm_xpose_%s for %s')\n",*x,commname ) ; |
---|
486 | fprintf(fp,"CALL wrf_dm_xpose_%s ( grid%%domdesc , grid%%comms, %s )\n", *x , commname ) ; |
---|
487 | |
---|
488 | close_the_file(fp) ; |
---|
489 | } |
---|
490 | skiperific: |
---|
491 | ; |
---|
492 | } |
---|
493 | return(0) ; |
---|
494 | } |
---|
495 | |
---|
496 | int |
---|
497 | gen_comm_descrips ( char * dirname ) |
---|
498 | { |
---|
499 | node_t * p ; |
---|
500 | char * fn = "dm_comm_cpp_flags" ; |
---|
501 | char commname[NAMELEN] ; |
---|
502 | char fname[NAMELEN] ; |
---|
503 | FILE * fp ; |
---|
504 | int ncomm ; |
---|
505 | |
---|
506 | if ( dirname == NULL ) return(1) ; |
---|
507 | |
---|
508 | if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s",dirname,fn) ; } |
---|
509 | else { sprintf(fname,"%s",fn) ; } |
---|
510 | |
---|
511 | if ((fp = fopen( fname , "w" )) == NULL ) |
---|
512 | { |
---|
513 | fprintf(stderr,"WARNING: gen_comm_descrips in registry cannot open %s for writing\n",fname ) ; |
---|
514 | } |
---|
515 | |
---|
516 | ncomm = 1 ; |
---|
517 | for ( p = Halos ; p != NULL ; p = p->next ) |
---|
518 | { |
---|
519 | strcpy( commname, p->name ) ; |
---|
520 | make_upper_case(commname) ; |
---|
521 | fprintf(fp,"-D%s=%d\n",commname,ncomm++) ; |
---|
522 | } |
---|
523 | for ( p = Periods ; p != NULL ; p = p->next ) |
---|
524 | { |
---|
525 | strcpy( commname, p->name ) ; |
---|
526 | make_upper_case(commname) ; |
---|
527 | fprintf(fp,"-D%s=%d\n",commname,ncomm++) ; |
---|
528 | } |
---|
529 | for ( p = Xposes ; p != NULL ; p = p->next ) |
---|
530 | { |
---|
531 | strcpy( commname, p->name ) ; |
---|
532 | make_upper_case(commname) ; |
---|
533 | fprintf(fp,"-D%s=%d\n",commname,ncomm++) ; |
---|
534 | } |
---|
535 | fprintf(fp,"-DWRF_RSL_NCOMMS=%d\n",ncomm-1 ) ; |
---|
536 | return(0) ; |
---|
537 | } |
---|
538 | |
---|
539 | /* |
---|
540 | |
---|
541 | |
---|
542 | |
---|
543 | */ |
---|
544 | |
---|
545 | /* for each core, generate the halo updates to allow shifting all state data */ |
---|
546 | int |
---|
547 | gen_shift ( char * dirname ) |
---|
548 | { |
---|
549 | int i, ncore ; |
---|
550 | FILE * fp ; |
---|
551 | node_t *p, *q, *dimd ; |
---|
552 | char * corename ; |
---|
553 | char **direction ; |
---|
554 | char *directions[] = { "x", "y", 0L } ; |
---|
555 | char fname[NAMELEN], vname[NAMELEN], vname2[NAMELEN], core[NAMELEN] ; |
---|
556 | char indices[NAMELEN], post[NAMELEN], tmp3[NAMELEN] ; |
---|
557 | int zdex ; |
---|
558 | int said_it = 0 ; |
---|
559 | |
---|
560 | for ( direction = directions ; *direction != NULL ; direction++ ) |
---|
561 | { |
---|
562 | for ( ncore = 0 ; ncore < get_num_cores() ; ncore++ ) |
---|
563 | { |
---|
564 | corename = get_corename_i(ncore) ; |
---|
565 | if ( dirname == NULL || corename == NULL ) return(1) ; |
---|
566 | if ( strlen(dirname) > 0 ) |
---|
567 | { sprintf(fname,"%s/%s_shift_halo_%s.inc",dirname,corename,*direction) ; } |
---|
568 | else |
---|
569 | { sprintf(fname,"%s_shift_halo_%s.inc",corename,*direction) ; } |
---|
570 | if ((fp = fopen( fname , "w" )) == NULL ) return(1) ; |
---|
571 | print_warning(fp,fname) ; |
---|
572 | fprintf(fp,"IF ( grid%%shift_%s == invalid_message_value ) THEN\n",*direction ) ; |
---|
573 | fprintf(fp," CALL wrf_debug ( 50 , 'set up halo for %s shift' )\n",*direction ) ; |
---|
574 | fprintf(fp," CALL setup_halo_rsl( grid )\n" ) ; |
---|
575 | fprintf(fp," CALL reset_msgs_%s_shift\n", *direction ) ; |
---|
576 | |
---|
577 | for ( p = Domain.fields ; p != NULL ; p = p->next ) |
---|
578 | { |
---|
579 | |
---|
580 | /* special cases in WRF */ |
---|
581 | if ( !strcmp( p->name , "xf_ens" ) || !strcmp( p->name , "pr_ens" ) || |
---|
582 | !strcmp( p->name , "abstot" ) || !strcmp( p->name , "absnxt" ) || |
---|
583 | !strcmp( p->name , "emstot" ) || !strcmp( p->name , "obs_savwt" ) ) { |
---|
584 | if ( sw_move && ! said_it ) { fprintf(stderr,"Info only - not an error: Moving nests not implemented for Grell Ens. Cumulus\n") ; |
---|
585 | fprintf(stderr,"Info only - not an error: Moving nests not implemented for CAM radiation\n") ; |
---|
586 | fprintf(stderr,"Info only - not an error: Moving nests not implemented for Observation Nudging\n") ; |
---|
587 | said_it = 1 ; } |
---|
588 | continue ; |
---|
589 | } |
---|
590 | |
---|
591 | if (( p->node_kind & (FIELD | FOURD) ) && p->ndims >= 2 && ! p->boundary_array && |
---|
592 | ((!strncmp(p->use,"dyn_",4) && !strcmp(corename,p->use+4)) || strncmp(p->use,"dyn_",4))) |
---|
593 | { |
---|
594 | |
---|
595 | if ( p->node_kind & FOURD ) { |
---|
596 | sprintf(core,"") ; |
---|
597 | } else { |
---|
598 | if (!strncmp( p->use, "dyn_", 4)) sprintf(core,"%s_",corename) ; |
---|
599 | else sprintf(core,"") ; |
---|
600 | } |
---|
601 | |
---|
602 | /* make sure that the only things we are shifting are arrays that have a decomposed X and a Y dimension */ |
---|
603 | if ( get_dimnode_for_coord( p , COORD_X ) && get_dimnode_for_coord( p , COORD_Y ) ) { |
---|
604 | if ( p->type->type_type == SIMPLE ) |
---|
605 | { |
---|
606 | for ( i = 1 ; i <= p->ntl ; i++ ) |
---|
607 | { |
---|
608 | if ( p->ntl > 1 ) sprintf(vname,"%s_%d",p->name,i ) ; |
---|
609 | else sprintf(vname,"%s",p->name ) ; |
---|
610 | if ( p->ntl > 1 ) sprintf(vname2,"%s%s_%d",core,p->name,i ) ; |
---|
611 | else sprintf(vname2,"%s%s",core,p->name ) ; |
---|
612 | if ( p->node_kind & FOURD ) |
---|
613 | { |
---|
614 | node_t *member ; |
---|
615 | zdex = get_index_for_coord( p , COORD_Z ) ; |
---|
616 | if ( zdex >=1 && zdex <= 3 ) |
---|
617 | { |
---|
618 | for ( member = p->members ; member != NULL ; member = member->next ) |
---|
619 | { |
---|
620 | if ( strcmp( member->name, "-" ) ) |
---|
621 | { |
---|
622 | fprintf(fp, |
---|
623 | " if ( P_%s .GT. 1 ) CALL add_msg_%s_shift_%s ( %s ( grid%%sm31,grid%%sm32,grid%%sm33,P_%s), glen(%d) )\n", |
---|
624 | member->name, *direction, p->type->name, vname, member->name, zdex+1 ) ; |
---|
625 | p->subject_to_communication = 1 ; |
---|
626 | } |
---|
627 | } |
---|
628 | } |
---|
629 | else |
---|
630 | { |
---|
631 | fprintf(stderr,"WARNING: %d some dimension info missing for 4d array %s\n",zdex,t2) ; |
---|
632 | } |
---|
633 | } |
---|
634 | else |
---|
635 | { |
---|
636 | strcpy (indices,""); |
---|
637 | if ( sw_deref_kludge ) /* && strchr (p->name, '%') != NULLCHARPTR ) */ |
---|
638 | { |
---|
639 | sprintf(post,")") ; |
---|
640 | sprintf(indices, "%s",index_with_firstelem("(","",tmp3,p,post)) ; |
---|
641 | } |
---|
642 | dimd = get_dimnode_for_coord( p , COORD_Z ) ; |
---|
643 | zdex = get_index_for_coord( p , COORD_Z ) ; |
---|
644 | if ( dimd != NULL ) |
---|
645 | { |
---|
646 | char dimstrg[256] ; |
---|
647 | |
---|
648 | if ( dimd->len_defined_how == DOMAIN_STANDARD ) |
---|
649 | sprintf(dimstrg,"(glen(%d))",zdex+1) ; |
---|
650 | else if ( dimd->len_defined_how == NAMELIST ) |
---|
651 | { |
---|
652 | if ( !strcmp(dimd->assoc_nl_var_s,"1") ) |
---|
653 | sprintf(dimstrg,"config_flags%%%s",dimd->assoc_nl_var_e) ; |
---|
654 | else |
---|
655 | sprintf(dimstrg,"(config_flags%%%s - config_flags%%%s + 1)",dimd->assoc_nl_var_e,dimd->assoc_nl_var_s) ; |
---|
656 | } |
---|
657 | else if ( dimd->len_defined_how == CONSTANT ) |
---|
658 | sprintf(dimstrg,"(%d - %d + 1)",dimd->coord_end,dimd->coord_start) ; |
---|
659 | |
---|
660 | fprintf(fp," CALL add_msg_%s_shift_%s ( grid%%%s%s , %s )\n", *direction, p->type->name, vname2, indices, dimstrg ) ; |
---|
661 | p->subject_to_communication = 1 ; |
---|
662 | } |
---|
663 | else if ( p->ndims == 2 ) /* 2d */ |
---|
664 | { |
---|
665 | fprintf(fp," CALL add_msg_%s_shift_%s ( grid%%%s%s , %s )\n", *direction, p->type->name, vname2, indices, "1" ) ; |
---|
666 | p->subject_to_communication = 1 ; |
---|
667 | } |
---|
668 | } |
---|
669 | } |
---|
670 | } |
---|
671 | } |
---|
672 | } |
---|
673 | } |
---|
674 | fprintf(fp," CALL stencil_%s_shift ( grid%%domdesc , grid%%shift_%s )\n", *direction , *direction ) ; |
---|
675 | fprintf(fp,"ENDIF\n") ; |
---|
676 | fprintf(fp," CALL wrf_debug ( 50 , 'exchange halo for %s shift' )\n",*direction ) ; |
---|
677 | fprintf(fp,"CALL rsl_exch_stencil ( grid%%domdesc , grid%%shift_%s )\n", *direction ) ; |
---|
678 | |
---|
679 | for ( p = Domain.fields ; p != NULL ; p = p->next ) |
---|
680 | { |
---|
681 | |
---|
682 | /* special cases in WRF */ |
---|
683 | if ( !strcmp( p->name , "xf_ens" ) || !strcmp( p->name , "pr_ens" ) || |
---|
684 | !strcmp( p->name , "abstot" ) || !strcmp( p->name , "absnxt" ) || |
---|
685 | !strcmp( p->name , "emstot" ) || !strcmp( p->name , "obs_savwt" ) ) { |
---|
686 | continue ; |
---|
687 | } |
---|
688 | if ( p->node_kind & FOURD ) { |
---|
689 | sprintf(core,"") ; |
---|
690 | } else { |
---|
691 | if (!strncmp( p->use, "dyn_", 4)) sprintf(core,"%s_",corename) ; |
---|
692 | else sprintf(core,"") ; |
---|
693 | } |
---|
694 | |
---|
695 | if (( p->node_kind & (FIELD | FOURD) ) && p->ndims >= 2 && ! p->boundary_array && |
---|
696 | ((!strncmp(p->use,"dyn_",4) && !strcmp(corename,p->use+4)) || strncmp(p->use,"dyn_",4))) |
---|
697 | { |
---|
698 | /* make sure that the only things we are shifting are arrays that have a decomposed X and a Y dimension */ |
---|
699 | if ( get_dimnode_for_coord( p , COORD_X ) && get_dimnode_for_coord( p , COORD_Y ) ) { |
---|
700 | if ( p->type->type_type == SIMPLE ) |
---|
701 | { |
---|
702 | for ( i = 1 ; i <= p->ntl ; i++ ) |
---|
703 | { |
---|
704 | if ( p->ntl > 1 ) sprintf(vname,"%s_%d",p->name,i ) ; |
---|
705 | else sprintf(vname,"%s",p->name ) ; |
---|
706 | if ( p->ntl > 1 ) sprintf(vname2,"%s%s_%d",core,p->name,i ) ; |
---|
707 | else sprintf(vname2,"%s%s",core,p->name ) ; |
---|
708 | |
---|
709 | if ( p->node_kind & FOURD ) |
---|
710 | { |
---|
711 | node_t *member ; |
---|
712 | zdex = get_index_for_coord( p , COORD_Z ) ; |
---|
713 | if ( zdex >=1 && zdex <= 3 ) |
---|
714 | { |
---|
715 | for ( member = p->members ; member != NULL ; member = member->next ) |
---|
716 | { |
---|
717 | if ( strcmp( member->name, "-" ) ) |
---|
718 | { |
---|
719 | if ( !strcmp( *direction, "x" ) ) |
---|
720 | { |
---|
721 | fprintf(fp, |
---|
722 | " if ( P_%s .GT. 1 ) %s ( ips:min(ide%s,ipe),:,jms:jme,P_%s) = %s (ips+px:min(ide%s,ipe)+px,:,jms:jme,P_%s)\n", |
---|
723 | member->name, vname, member->stag_x?"":"-1", member->name, vname, member->stag_x?"":"-1", member->name ) ; |
---|
724 | } |
---|
725 | else |
---|
726 | { |
---|
727 | fprintf(fp, |
---|
728 | " if ( P_%s .GT. 1 ) %s ( ims:ime,:,jps:min(jde%s,jpe),P_%s) = %s (ims:ime,:,jps+py:min(jde%s,jpe)+py,P_%s)\n", |
---|
729 | member->name, vname, member->stag_y?"":"-1", member->name, vname, member->stag_y?"":"-1", member->name ) ; |
---|
730 | } |
---|
731 | } |
---|
732 | } |
---|
733 | } |
---|
734 | else |
---|
735 | { |
---|
736 | fprintf(stderr,"WARNING: %d some dimension info missing for 4d array %s\n",zdex,t2) ; |
---|
737 | } |
---|
738 | } |
---|
739 | else |
---|
740 | { |
---|
741 | char * vdim ; |
---|
742 | vdim = "" ; |
---|
743 | if ( p->ndims == 3 ) vdim = ":," ; |
---|
744 | if ( !strcmp( *direction, "x" ) ) |
---|
745 | { |
---|
746 | fprintf(fp,"grid%%%s (ips:min(ide%s,ipe),%sjms:jme) = grid%%%s (ips+px:min(ide%s,ipe)+px,%sjms:jme)\n", vname2, p->stag_x?"":"-1", vdim, vname2, p->stag_x?"":"-1", vdim ) ; |
---|
747 | } |
---|
748 | else |
---|
749 | { |
---|
750 | fprintf(fp,"grid%%%s (ims:ime,%sjps:min(jde%s,jpe)) = grid%%%s (ims:ime,%sjps+py:min(jde%s,jpe)+py)\n", vname2, vdim, p->stag_y?"":"-1", vname2, vdim, p->stag_y?"":"-1" ) ; |
---|
751 | } |
---|
752 | } |
---|
753 | } |
---|
754 | } |
---|
755 | } |
---|
756 | } |
---|
757 | } |
---|
758 | close_the_file(fp) ; |
---|
759 | } |
---|
760 | } |
---|
761 | } |
---|
762 | |
---|
763 | int |
---|
764 | gen_datacalls ( char * dirname ) |
---|
765 | { |
---|
766 | int i ; |
---|
767 | FILE * fp ; |
---|
768 | char * corename ; |
---|
769 | char * fn = "data_calls.inc" ; |
---|
770 | char fname[NAMELEN] ; |
---|
771 | |
---|
772 | for ( i = 0 ; i < get_num_cores() ; i++ ) |
---|
773 | { |
---|
774 | corename = get_corename_i(i) ; |
---|
775 | if ( dirname == NULL || corename == NULL ) return(1) ; |
---|
776 | if ( strlen(dirname) > 0 ) |
---|
777 | { sprintf(fname,"%s/%s_%s",dirname,corename,fn) ; } |
---|
778 | else |
---|
779 | { sprintf(fname,"%s_%s",corename,fn) ; } |
---|
780 | if ((fp = fopen( fname , "w" )) == NULL ) return(1) ; |
---|
781 | print_warning(fp,fname) ; |
---|
782 | fprintf(fp," CALL rsl_start_register_f90\n") ; |
---|
783 | parent_type = SIMPLE; |
---|
784 | gen_datacalls1( fp , corename, "grid%", FIELD , Domain.fields ) ; |
---|
785 | gen_datacalls1( fp , corename, "", FOURD , Domain.fields ) ; |
---|
786 | fprintf(fp,"#ifdef REGISTER_I1\n") ; |
---|
787 | gen_datacalls1( fp , corename, "", I1 , Domain.fields ) ; |
---|
788 | fprintf(fp,"#endif\n") ; |
---|
789 | fprintf(fp," CALL rsl_end_register_f90\n") ; |
---|
790 | fprintf(fp,"#define DATA_CALLS_INCLUDED\n") ; |
---|
791 | close_the_file(fp) ; |
---|
792 | } |
---|
793 | return(0) ; |
---|
794 | } |
---|
795 | |
---|
796 | int |
---|
797 | gen_datacalls1 ( FILE * fp , char * corename , char * structname , int mask , node_t * node ) |
---|
798 | { |
---|
799 | node_t * p, * q ; |
---|
800 | int i, member_number ; |
---|
801 | char tmp[NAMELEN],tmp2[NAMELEN], tc ; |
---|
802 | char indices[NAMELEN], post[NAMELEN] ; |
---|
803 | char s0[NAMELEN], s1[NAMELEN], s2[NAMELEN] ; |
---|
804 | char e0[NAMELEN], e1[NAMELEN], e2[NAMELEN] ; |
---|
805 | |
---|
806 | for ( p = node ; p != NULL ; p = p->next ) |
---|
807 | { |
---|
808 | if ( ( mask & p->node_kind ) && |
---|
809 | ((!strncmp(p->use,"dyn_",4) && !strcmp(corename,p->use+4)) || strncmp(p->use,"dyn_",4))) |
---|
810 | { |
---|
811 | if ( (p->subject_to_communication == 1) || ( p->type->type_type == DERIVED ) ) |
---|
812 | { |
---|
813 | if ( p->type->type_type == SIMPLE ) |
---|
814 | { |
---|
815 | if ( !strcmp( p->type->name , "real" ) ) tc = 'R' ; |
---|
816 | if ( !strcmp( p->type->name , "double" ) ) tc = 'D' ; |
---|
817 | if ( !strcmp( p->type->name , "integer" ) ) tc = 'I' ; |
---|
818 | for ( i = 1 ; i <= p->ntl ; i++ ) |
---|
819 | { |
---|
820 | /* IF (P_QI .ge. P_FIRST_SCALAR */ |
---|
821 | if ( p->members != NULL ) /* a 4d array */ |
---|
822 | { |
---|
823 | member_number = 0 ; |
---|
824 | for ( q = p->members ; q != NULL ; q = q->next ) |
---|
825 | { |
---|
826 | get_elem( "grid%", "", s0, 0, p , 0 ) ; |
---|
827 | get_elem( "grid%", "", s1, 1, p , 0 ) ; |
---|
828 | get_elem( "grid%", "", s2, 2, p , 0 ) ; |
---|
829 | |
---|
830 | get_elem( "grid%", "", e0, 0, p , 1 ) ; |
---|
831 | get_elem( "grid%", "", e1, 1, p , 1 ) ; |
---|
832 | get_elem( "grid%", "", e2, 2, p , 1 ) ; |
---|
833 | |
---|
834 | sprintf(tmp, "(%s,%s,%s,1+%d)", s0, s1, s2, member_number ) ; |
---|
835 | sprintf(tmp2, "(%s-%s+1)*(%s-%s+1)*(%s-%s+1)*%cWORDSIZE",e0,s0,e1,s1,e2,s2,tc) ; |
---|
836 | if ( p->ntl > 1 ) fprintf(fp," IF(1+%d.LE.num_%s)CALL rsl_register_f90_base_and_size ( %s%s_%d %s , &\n %s )\n", |
---|
837 | member_number,p->name,structname,p->name,i,tmp,tmp2) ; |
---|
838 | else fprintf(fp," IF(1+%d.LE.num_%s)CALL rsl_register_f90_base_and_size ( %s%s %s, &\n %s )\n", |
---|
839 | member_number,p->name,structname,p->name,tmp,tmp2) ; |
---|
840 | member_number++ ; |
---|
841 | } |
---|
842 | } |
---|
843 | else |
---|
844 | { |
---|
845 | char ca[NAMELEN] ; |
---|
846 | strcpy (indices,""); |
---|
847 | if ( sw_deref_kludge ) |
---|
848 | { |
---|
849 | sprintf(post,")") ; |
---|
850 | sprintf(indices, "%s",index_with_firstelem("(","",tmp,p,post)) ; |
---|
851 | } |
---|
852 | strcpy( ca, "" ) ; |
---|
853 | if (!strncmp( p->use , "dyn_", 4 )) { char * cb ; cb = p->use+4 ; sprintf(ca,"%s_", cb) ; } |
---|
854 | if ( p->ntl > 1 ) fprintf(fp," CALL rsl_register_f90_base_and_size ( %s%s%s_%d%s , SIZE( %s%s%s_%d ) * %cWORDSIZE )\n", |
---|
855 | structname,ca,p->name,i,indices, |
---|
856 | structname,ca,p->name,i,tc ) ; |
---|
857 | else fprintf(fp," CALL rsl_register_f90_base_and_size ( %s%s%s%s , SIZE( %s%s%s ) * %cWORDSIZE )\n", |
---|
858 | structname,ca,p->name,indices, |
---|
859 | structname,ca,p->name, tc) ; |
---|
860 | } |
---|
861 | } |
---|
862 | } |
---|
863 | else if ( p->type->type_type == DERIVED ) |
---|
864 | { |
---|
865 | parent_type = DERIVED; |
---|
866 | sprintf( tmp , "grid%%%s%%", p->name ) ; |
---|
867 | gen_datacalls1 ( fp , corename , tmp , mask, p->type->fields ) ; |
---|
868 | } |
---|
869 | } |
---|
870 | } |
---|
871 | } |
---|
872 | return(0) ; |
---|
873 | } |
---|
874 | |
---|
875 | /*****************/ |
---|
876 | /*****************/ |
---|
877 | |
---|
878 | gen_nest_packing ( char * dirname ) |
---|
879 | { |
---|
880 | gen_nest_pack( dirname ) ; |
---|
881 | gen_nest_unpack( dirname ) ; |
---|
882 | } |
---|
883 | |
---|
884 | #define PACKIT 1 |
---|
885 | #define UNPACKIT 2 |
---|
886 | |
---|
887 | int |
---|
888 | gen_nest_pack ( char * dirname ) |
---|
889 | { |
---|
890 | int i ; |
---|
891 | FILE * fp ; |
---|
892 | char * corename ; |
---|
893 | char * fnlst[] = { "nest_interpdown_pack.inc" , "nest_forcedown_pack.inc" , "nest_feedbackup_pack.inc", 0L } ; |
---|
894 | int down_path[] = { INTERP_DOWN , FORCE_DOWN , INTERP_UP } ; |
---|
895 | int ipath ; |
---|
896 | char ** fnp ; char * fn ; |
---|
897 | char fname[NAMELEN] ; |
---|
898 | node_t *node, *p, *dim ; |
---|
899 | int xdex, ydex, zdex ; |
---|
900 | char ddim[3][2][NAMELEN] ; |
---|
901 | char mdim[3][2][NAMELEN] ; |
---|
902 | char pdim[3][2][NAMELEN] ; |
---|
903 | char vname[NAMELEN] ; char tag[NAMELEN] ; char core[NAMELEN] ; |
---|
904 | int d2, d3 ; |
---|
905 | |
---|
906 | for ( fnp = fnlst , ipath = 0 ; *fnp ; fnp++ , ipath++ ) |
---|
907 | { |
---|
908 | fn = *fnp ; |
---|
909 | for ( i = 0 ; i < get_num_cores() ; i++ ) |
---|
910 | { |
---|
911 | corename = get_corename_i(i) ; |
---|
912 | if ( dirname == NULL || corename == NULL ) return(1) ; |
---|
913 | if ( strlen(dirname) > 0 ) { |
---|
914 | if ( strlen( corename ) > 0 ) |
---|
915 | { sprintf(fname,"%s/%s_%s",dirname,corename,fn) ; } |
---|
916 | else |
---|
917 | { sprintf(fname,"%s/%s",dirname,fn) ; } |
---|
918 | } else { |
---|
919 | if ( strlen( corename ) > 0 ) |
---|
920 | { sprintf(fname,"%s_%s",corename,fn) ; } |
---|
921 | else |
---|
922 | { sprintf(fname,"%s",fn) ; } |
---|
923 | } |
---|
924 | if ((fp = fopen( fname , "w" )) == NULL ) return(1) ; |
---|
925 | print_warning(fp,fname) ; |
---|
926 | |
---|
927 | d2 = 0 ; |
---|
928 | d3 = 0 ; |
---|
929 | node = Domain.fields ; |
---|
930 | |
---|
931 | count_fields ( node , &d2 , &d3 , corename , down_path[ipath] ) ; |
---|
932 | |
---|
933 | if ( d2 + d3 > 0 ) { |
---|
934 | if ( down_path[ipath] == INTERP_UP ) |
---|
935 | { |
---|
936 | |
---|
937 | fprintf(fp,"msize = %d * nlev + %d\n", d3, d2 ) ; |
---|
938 | fprintf(fp,"CALL rsl_to_parent_info( grid%%domdesc, intermediate_grid%%domdesc , &\n") ; |
---|
939 | fprintf(fp," msize*RWORDSIZE, &\n") ; |
---|
940 | fprintf(fp," i,j,nig,njg,cm,cn,pig,pjg,retval )\n") ; |
---|
941 | fprintf(fp,"DO while ( retval .eq. 1 )\n") ; |
---|
942 | |
---|
943 | gen_nest_packunpack ( fp , Domain.fields, corename, PACKIT, down_path[ipath] ) ; |
---|
944 | |
---|
945 | fprintf(fp,"CALL rsl_to_parent_info( grid%%domdesc, intermediate_grid%%domdesc , &\n") ; |
---|
946 | fprintf(fp," msize*RWORDSIZE, &\n") ; |
---|
947 | fprintf(fp," i,j,nig,njg,cm,cn,pig,pjg,retval )\n") ; |
---|
948 | fprintf(fp,"ENDDO\n") ; |
---|
949 | |
---|
950 | } |
---|
951 | else |
---|
952 | { |
---|
953 | |
---|
954 | fprintf(fp,"msize = %d * nlev + %d\n", d3, d2 ) ; |
---|
955 | fprintf(fp,"CALL rsl_to_child_info( grid%%domdesc, intermediate_grid%%domdesc , &\n") ; |
---|
956 | fprintf(fp," msize*RWORDSIZE, &\n") ; |
---|
957 | fprintf(fp," i,j,pig,pjg,cm,cn,nig,njg,retval )\n") ; |
---|
958 | fprintf(fp,"DO while ( retval .eq. 1 )\n") ; |
---|
959 | |
---|
960 | gen_nest_packunpack ( fp , Domain.fields, corename, PACKIT, down_path[ipath] ) ; |
---|
961 | |
---|
962 | fprintf(fp,"CALL rsl_to_child_info( grid%%domdesc, intermediate_grid%%domdesc , &\n") ; |
---|
963 | fprintf(fp," msize*RWORDSIZE, &\n") ; |
---|
964 | fprintf(fp," i,j,pig,pjg,cm,cn,nig,njg,retval )\n") ; |
---|
965 | fprintf(fp,"ENDDO\n") ; |
---|
966 | |
---|
967 | } |
---|
968 | } |
---|
969 | |
---|
970 | close_the_file(fp) ; |
---|
971 | } |
---|
972 | } |
---|
973 | return(0) ; |
---|
974 | } |
---|
975 | |
---|
976 | int |
---|
977 | gen_nest_unpack ( char * dirname ) |
---|
978 | { |
---|
979 | int i ; |
---|
980 | FILE * fp ; |
---|
981 | char * corename ; |
---|
982 | char * fnlst[] = { "nest_interpdown_unpack.inc" , "nest_forcedown_unpack.inc" , "nest_feedbackup_unpack.inc" , 0L } ; |
---|
983 | int down_path[] = { INTERP_DOWN , FORCE_DOWN , INTERP_UP } ; |
---|
984 | int ipath ; |
---|
985 | char ** fnp ; char * fn ; |
---|
986 | char fname[NAMELEN] ; |
---|
987 | node_t *node, *p, *dim ; |
---|
988 | int xdex, ydex, zdex ; |
---|
989 | char ddim[3][2][NAMELEN] ; |
---|
990 | char mdim[3][2][NAMELEN] ; |
---|
991 | char pdim[3][2][NAMELEN] ; |
---|
992 | char vname[NAMELEN] ; char tag[NAMELEN] ; char core[NAMELEN] ; |
---|
993 | int d2, d3 ; |
---|
994 | |
---|
995 | for ( fnp = fnlst , ipath = 0 ; *fnp ; fnp++ , ipath++ ) |
---|
996 | { |
---|
997 | fn = *fnp ; |
---|
998 | for ( i = 0 ; i < get_num_cores() ; i++ ) |
---|
999 | { |
---|
1000 | d2 = 0 ; |
---|
1001 | d3 = 0 ; |
---|
1002 | node = Domain.fields ; |
---|
1003 | |
---|
1004 | corename = get_corename_i(i) ; |
---|
1005 | if ( dirname == NULL || corename == NULL ) return(1) ; |
---|
1006 | if ( strlen(dirname) > 0 ) |
---|
1007 | { sprintf(fname,"%s/%s_%s",dirname,corename,fn) ; } |
---|
1008 | else |
---|
1009 | { sprintf(fname,"%s_%s",corename,fn) ; } |
---|
1010 | if ((fp = fopen( fname , "w" )) == NULL ) return(1) ; |
---|
1011 | print_warning(fp,fname) ; |
---|
1012 | |
---|
1013 | count_fields ( node , &d2 , &d3 , corename , down_path[ipath] ) ; |
---|
1014 | |
---|
1015 | if ( d2 + d3 > 0 ) { |
---|
1016 | if ( down_path[ipath] == INTERP_UP ) |
---|
1017 | { |
---|
1018 | |
---|
1019 | fprintf(fp,"CALL rsl_from_child_info(i,j,pig,pjg,cm,cn,nig,njg,retval)\n") ; |
---|
1020 | fprintf(fp,"DO while ( retval .eq. 1 )\n") ; |
---|
1021 | |
---|
1022 | gen_nest_packunpack ( fp , Domain.fields, corename, UNPACKIT, down_path[ipath] ) ; |
---|
1023 | |
---|
1024 | fprintf(fp,"CALL rsl_from_child_info(i,j,pig,pjg,cm,cn,nig,njg,retval)\n") ; |
---|
1025 | fprintf(fp,"ENDDO\n") ; |
---|
1026 | |
---|
1027 | } |
---|
1028 | else |
---|
1029 | { |
---|
1030 | |
---|
1031 | fprintf(fp,"CALL rsl_from_parent_info(i,j,nig,njg,cm,cn,pig,pjg,retval)\n") ; |
---|
1032 | fprintf(fp,"DO while ( retval .eq. 1 )\n") ; |
---|
1033 | gen_nest_packunpack ( fp , Domain.fields, corename, UNPACKIT, down_path[ipath] ) ; |
---|
1034 | fprintf(fp,"CALL rsl_from_parent_info(i,j,nig,njg,cm,cn,pig,pjg,retval)\n") ; |
---|
1035 | fprintf(fp,"ENDDO\n") ; |
---|
1036 | |
---|
1037 | } |
---|
1038 | } |
---|
1039 | |
---|
1040 | close_the_file(fp) ; |
---|
1041 | } |
---|
1042 | } |
---|
1043 | return(0) ; |
---|
1044 | } |
---|
1045 | |
---|
1046 | int |
---|
1047 | gen_nest_packunpack ( FILE *fp , node_t * node , char * corename, int dir, int down_path ) |
---|
1048 | { |
---|
1049 | int i ; |
---|
1050 | node_t *p, *p1, *dim ; |
---|
1051 | int d2, d3, xdex, ydex, zdex ; |
---|
1052 | char ddim[3][2][NAMELEN] ; |
---|
1053 | char mdim[3][2][NAMELEN] ; |
---|
1054 | char pdim[3][2][NAMELEN] ; |
---|
1055 | char vname[NAMELEN], vname2[NAMELEN], dexes[NAMELEN] ; char tag[NAMELEN] ; char core[NAMELEN] ; |
---|
1056 | char c, d ; |
---|
1057 | |
---|
1058 | for ( p1 = node ; p1 != NULL ; p1 = p1->next ) |
---|
1059 | { |
---|
1060 | |
---|
1061 | if ( p1->node_kind & FOURD ) |
---|
1062 | { |
---|
1063 | gen_nest_packunpack ( fp, p1->members, corename, dir , down_path ) ; /* RECURSE over members */ |
---|
1064 | continue ; |
---|
1065 | } |
---|
1066 | else |
---|
1067 | { |
---|
1068 | p = p1 ; |
---|
1069 | } |
---|
1070 | |
---|
1071 | if ( p->io_mask & down_path ) |
---|
1072 | { |
---|
1073 | if ((!strncmp( p->use, "dyn_", 4) && !strcmp(p->use+4,corename)) || strncmp( p->use, "dyn_", 4)) |
---|
1074 | { |
---|
1075 | |
---|
1076 | if (!strncmp( p->use, "dyn_", 4)) sprintf(core,"%s",corename) ; |
---|
1077 | else sprintf(core,"") ; |
---|
1078 | |
---|
1079 | if ( p->ntl > 1 ) sprintf(tag,"_2") ; |
---|
1080 | else sprintf(tag,"") ; |
---|
1081 | |
---|
1082 | set_dim_strs ( p , ddim , mdim , pdim , "c", 0 ) ; |
---|
1083 | zdex = get_index_for_coord( p , COORD_Z ) ; |
---|
1084 | xdex = get_index_for_coord( p , COORD_X ) ; |
---|
1085 | ydex = get_index_for_coord( p , COORD_Y ) ; |
---|
1086 | |
---|
1087 | if ( down_path == INTERP_UP ) |
---|
1088 | { |
---|
1089 | c = ( dir == PACKIT )?'n':'p' ; |
---|
1090 | d = ( dir == PACKIT )?'2':'1' ; |
---|
1091 | } else { |
---|
1092 | c = ( dir == UNPACKIT )?'n':'p' ; |
---|
1093 | d = ( dir == UNPACKIT )?'2':'1' ; |
---|
1094 | } |
---|
1095 | |
---|
1096 | if ( zdex >= 0 ) { |
---|
1097 | if ( xdex == 0 && zdex == 1 && ydex == 2 ) sprintf(dexes,"pig,k,pjg") ; |
---|
1098 | else if ( zdex == 0 && xdex == 1 && ydex == 2 ) sprintf(dexes,"k,pig,pjg") ; |
---|
1099 | else if ( xdex == 0 && ydex == 1 && zdex == 2 ) sprintf(dexes,"pig,pjg,k") ; |
---|
1100 | } else { |
---|
1101 | if ( xdex == 0 && ydex == 1 ) sprintf(dexes,"pig,pjg") ; |
---|
1102 | if ( ydex == 0 && xdex == 1 ) sprintf(dexes,"pjg,pig") ; |
---|
1103 | } |
---|
1104 | |
---|
1105 | /* construct variable name */ |
---|
1106 | if ( p->scalar_array_member ) |
---|
1107 | { |
---|
1108 | sprintf(vname,"%s%s(%s,P_%s)",p->use,tag,dexes,p->name) ; |
---|
1109 | if ( strlen(core) > 0 ) |
---|
1110 | sprintf(vname2,"%s_%s%s(%s,P_%s)",core,p->use,tag,dexes,p->name) ; |
---|
1111 | else |
---|
1112 | sprintf(vname2,"%s%s(%s,P_%s)",p->use,tag,dexes,p->name) ; |
---|
1113 | } |
---|
1114 | else |
---|
1115 | { |
---|
1116 | sprintf(vname,"%s%s(%s)",p->name,tag,dexes) ; |
---|
1117 | if ( strlen(core) > 0 ) |
---|
1118 | sprintf(vname2,"%s_%s%s(%s)",core,p->name,tag,dexes) ; |
---|
1119 | else |
---|
1120 | sprintf(vname2,"%s%s(%s)",p->name,tag,dexes) ; |
---|
1121 | } |
---|
1122 | |
---|
1123 | if ( p->scalar_array_member ) |
---|
1124 | { |
---|
1125 | fprintf(fp,"IF ( P_%s .GE. PARAM_FIRST_SCALAR ) THEN\n",p->name) ; |
---|
1126 | } |
---|
1127 | |
---|
1128 | if ( dir == UNPACKIT ) |
---|
1129 | { |
---|
1130 | if ( down_path == INTERP_UP ) |
---|
1131 | { |
---|
1132 | if ( zdex >= 0 ) { |
---|
1133 | fprintf(fp,"CALL rsl_from_child_msg(((%s)-(%s)+1)*RWORDSIZE,xv) ;\n",ddim[zdex][1], ddim[zdex][0] ) ; |
---|
1134 | } else { |
---|
1135 | fprintf(fp,"CALL rsl_from_child_msg(RWORDSIZE,xv)\n" ) ; |
---|
1136 | } |
---|
1137 | fprintf(fp,"IF ( %s_cd_feedback_mask( pig, ips_save, ipe_save , pjg, jps_save, jpe_save, %s, %s ) ) THEN\n", |
---|
1138 | corename, p->stag_x?".TRUE.":".FALSE." ,p->stag_y?".TRUE.":".FALSE." ) ; |
---|
1139 | if ( zdex >= 0 ) { |
---|
1140 | fprintf(fp,"DO k = %s,%s\nNEST_INFLUENCE(grid%%%s,xv(k))\nENDDO\n", ddim[zdex][0], ddim[zdex][1], vname2 ) ; |
---|
1141 | } else { |
---|
1142 | fprintf(fp,"grid%%%s = xv(1) ;\n", vname2) ; |
---|
1143 | } |
---|
1144 | fprintf(fp,"ENDIF\n") ; |
---|
1145 | } |
---|
1146 | else |
---|
1147 | { |
---|
1148 | if ( zdex >= 0 ) { |
---|
1149 | fprintf(fp,"CALL rsl_from_parent_msg(((%s)-(%s)+1)*RWORDSIZE,xv)\nDO k = %s,%s\ngrid%%%s = xv(k)\nENDDO\n", |
---|
1150 | ddim[zdex][1], ddim[zdex][0], ddim[zdex][0], ddim[zdex][1], vname2) ; |
---|
1151 | } else { |
---|
1152 | fprintf(fp,"CALL rsl_from_parent_msg(RWORDSIZE,xv)\ngrid%%%s = xv(1)\n", vname2) ; |
---|
1153 | } |
---|
1154 | } |
---|
1155 | } |
---|
1156 | else |
---|
1157 | { |
---|
1158 | if ( down_path == INTERP_UP ) |
---|
1159 | { |
---|
1160 | if ( zdex >= 0 ) { |
---|
1161 | fprintf(fp,"DO k = %s,%s\nxv(k)= intermediate_grid%%%s\nENDDO\nCALL rsl_to_parent_msg(((%s)-(%s)+1)*RWORDSIZE,xv)\n", |
---|
1162 | ddim[zdex][0], ddim[zdex][1], vname2, ddim[zdex][1], ddim[zdex][0] ) ; |
---|
1163 | } else { |
---|
1164 | fprintf(fp,"xv(1)= intermediate_grid%%%s\nCALL rsl_to_parent_msg(RWORDSIZE,xv)\n", vname2) ; |
---|
1165 | } |
---|
1166 | } |
---|
1167 | else |
---|
1168 | { |
---|
1169 | if ( zdex >= 0 ) { |
---|
1170 | fprintf(fp,"DO k = %s,%s\nxv(k)= grid%%%s\nENDDO\nCALL rsl_to_child_msg(((%s)-(%s)+1)*RWORDSIZE,xv)\n", |
---|
1171 | ddim[zdex][0], ddim[zdex][1], vname2, ddim[zdex][1], ddim[zdex][0] ) ; |
---|
1172 | } else { |
---|
1173 | fprintf(fp,"xv(1)=grid%%%s\nCALL rsl_to_child_msg(RWORDSIZE,xv)\n", vname2) ; |
---|
1174 | } |
---|
1175 | } |
---|
1176 | } |
---|
1177 | if ( p->scalar_array_member ) |
---|
1178 | { |
---|
1179 | fprintf(fp,"ENDIF\n") ; |
---|
1180 | } |
---|
1181 | } |
---|
1182 | } |
---|
1183 | } |
---|
1184 | |
---|
1185 | return(0) ; |
---|
1186 | } |
---|
1187 | |
---|
1188 | /*****************/ |
---|
1189 | |
---|
1190 | int |
---|
1191 | count_fields ( node_t * node , int * d2 , int * d3 , char * corename , int down_path ) |
---|
1192 | { |
---|
1193 | node_t * p ; |
---|
1194 | int zdex ; |
---|
1195 | /* count up the total number of levels from all fields */ |
---|
1196 | for ( p = node ; p != NULL ; p = p->next ) |
---|
1197 | { |
---|
1198 | if ( p->node_kind == FOURD ) |
---|
1199 | { |
---|
1200 | count_fields( p->members , d2 , d3 , corename , down_path ) ; /* RECURSE */ |
---|
1201 | } |
---|
1202 | else |
---|
1203 | { |
---|
1204 | if ( p->io_mask & down_path ) |
---|
1205 | { |
---|
1206 | if ((!strncmp( p->use, "dyn_", 4) && !strcmp(p->use+4,corename)) || strncmp( p->use, "dyn_", 4)) |
---|
1207 | { |
---|
1208 | if ( p->node_kind == FOURD ) |
---|
1209 | zdex = get_index_for_coord( p->members , COORD_Z ) ; |
---|
1210 | else |
---|
1211 | zdex = get_index_for_coord( p , COORD_Z ) ; |
---|
1212 | |
---|
1213 | if ( zdex < 0 ) { |
---|
1214 | (*d2)++ ; /* if no zdex then only 2 d */ |
---|
1215 | } else { |
---|
1216 | (*d3)++ ; /* if has a zdex then 3 d */ |
---|
1217 | } |
---|
1218 | } |
---|
1219 | } |
---|
1220 | } |
---|
1221 | } |
---|
1222 | return(0) ; |
---|
1223 | } |
---|
1224 | |
---|
1225 | /*****************/ |
---|
1226 | |
---|
1227 | int |
---|
1228 | gen_comms ( char * dirname ) |
---|
1229 | { |
---|
1230 | if ( sw_dm_parallel ) |
---|
1231 | fprintf(stderr,"ADVISORY: RSL version of gen_comms is linked in with registry program.\n") ; |
---|
1232 | |
---|
1233 | gen_halos( "inc" ) ; |
---|
1234 | gen_shift( "inc" ) ; |
---|
1235 | gen_periods( "inc" ) ; |
---|
1236 | gen_xposes( "inc" ) ; |
---|
1237 | gen_comm_descrips( "inc" ) ; |
---|
1238 | gen_datacalls( "inc" ) ; |
---|
1239 | gen_nest_packing( "inc" ) ; |
---|
1240 | |
---|
1241 | return(0) ; |
---|
1242 | } |
---|
1243 | |
---|