File: /nfs/home/0/users/jenkins/mfix.git/model/mfix.f
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 PROGRAM MFIX
63
64
65
66
67 USE param
68 USE param1
69 USE run
70 USE time_cpu
71 USE funits
72 USE output
73 USE compar
74 USE mpi_utility
75 USE parallel_mpi
76 USE discretelement
77 USE mfix_pic
78 USE cdist
79 USE MFIX_netcdf
80 USE fldvar
81 USE cutcell
82 USE quadric
83 USE dashboard
84 USE qmom_kinetic_equation
85 USE functions
86
87 USE vtk, only : WRITE_VTK_FILES
88
89 use error_manager
90
91 IMPLICIT NONE
92
93
94
95
96 DOUBLE PRECISION :: CPU1
97
98 DOUBLE PRECISION :: CPUTIME_USED, WALLTIME_USED
99
100 CHARACTER(LEN=4) :: TUNIT
101
102 DOUBLE PRECISION :: TIME_SAVE
103
104 DOUBLE PRECISION :: DT_tmp
105
106 INTEGER :: L
107
108 INTEGER :: IER
109
110 CHARACTER(LEN=512) :: version
111
112 CHARACTER(LEN=512) :: omp_num_threads
113 INTEGER :: length
114 INTEGER :: status
115
116
117
118
119
120 DOUBLE PRECISION :: WALL_TIME
121
122
123
124
125
126
127
128
129 = 'RES = 01.6'
130
131 bDoing_postmfix = .false.
132
133
134 CALL PARALLEL_INIT
135 CALL GEN_LOG_BASENAME
136
137
138 = (myPE == PE_IO)
139
140
141 = '2015-1'
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167 CALL MACHINE_CONS
168
169
170
171 CALL GET_RUN_ID
172
173
174
175 CALL CPU_TIME (CPU00)
176 WALL0 = WALL_TIME()
177
178
179
180 CALL GET_DATA
181
182
183 CALL WRITE_OUT0
184 IF(.NOT.CARTESIAN_GRID) CALL WRITE_FLAGS
185
186
187 CALL WRITE_USR0
188
189
190
191
192
193
194
195
196 CALL PC_QUICKWIN
197
198
199 CALL INIT_ERR_MSG('MFIX')
200
201
202 101 CONTINUE
203
204
205
206 if (MFIX_usingNETCDF()) then
207 bGlobalNetcdf = .false.
208 do L = 1,20
209 if (bWrite_netcdf(L)) bGlobalNetcdf = .true.
210 enddo
211 endif
212
213
214 IF(AUTOMATIC_RESTART) THEN
215 RUN_TYPE = 'RESTART_1'
216 AUTOMATIC_RESTART = .FALSE.
217 ITER_RESTART = ITER_RESTART + 1
218 CALL CHECK_INITIAL_CONDITIONS
219 CALL CHECK_BOUNDARY_CONDITIONS
220 CALL CHECK_INTERNAL_SURFACES
221 CALL CHECK_POINT_SOURCES
222 CALL CHECK_CHEMICAL_RXNS
223 CALL SET_FLAGS
224 CALL SET_CONSTPROP
225 ENDIF
226
227 DT_TMP = DT
228 SELECT CASE (TRIM(RUN_TYPE))
229
230 CASE ('NEW')
231
232 CALL WRITE_RES0
233 DO L = 1, N_SPX
234 CALL WRITE_SPX0 (L, 0)
235 ENDDO
236
237 CASE ('RESTART_1')
238
239 CALL READ_RES1
240 WRITE(ERR_MSG, 1010) TIME, NSTEP
241 CALL FLUSH_ERR_MSG()
242
243 CASE ('RESTART_2')
244 TIME_SAVE = TIME
245
246 if (myPE .ne. PE_IO .and. bDist_IO .and. bStart_with_one_res) then
247 write (unit_res,rec=1) version
248 write (unit_res,rec=2) 4
249 write (unit_res,rec=3) 4
250 endif
251
252 CALL READ_RES1
253 TIME = TIME_SAVE
254
255 WRITE(ERR_MSG, 1010) TIME, NSTEP
256 CALL FLUSH_ERR_MSG()
257
258 CALL WRITE_RES0
259
260
261
262
263
264 IF(.NOT.RE_INDEXING) THEN
265 CALL WRITE_RES1
266 DO L = 1, N_SPX
267 CALL WRITE_SPX0 (L, 0)
268 CALL WRITE_SPX1 (L, 0)
269 END DO
270 call write_netcdf(0,0,time)
271 ENDIF
272
273 CASE DEFAULT
274 CALL START_LOG
275 IF(DMP_LOG)WRITE (UNIT_LOG, *) &
276 ' MFIX: Do not know how to process'
277 IF(DMP_LOG)WRITE (UNIT_LOG, *) ' RUN_TYPE in data file'
278 CALL END_LOG
279 call mfix_exit(myPE)
280
281 END SELECT
282
283 call MPI_Barrier(MPI_COMM_WORLD,mpierr)
284
285 IF (DT_TMP /= UNDEFINED) THEN
286 DT = MAX(DT_MIN,MIN(DT_MAX,DT))
287 ELSE
288 DT = DT_TMP
289 ENDIF
290
291
292
293 IF(CARTESIAN_GRID) THEN
294 CALL SET_INCREMENTS
295 CALL SET_INCREMENTS3
296 ENDIF
297
298
299
300
301
302
303
304 CALL SET_FLAGS1
305
306
307 IF(CARTESIAN_GRID) CALL CHECK_BC_FLAGS
308
309
310 IF(.NOT.CARTESIAN_GRID) THEN
311 CALL SET_GEOMETRY1
312
313
314 ENDIF
315
316
317 IF(.NOT.CARTESIAN_GRID) THEN
318 CALL GET_CORNER_CELLS()
319 ELSE
320 IF (SET_CORNER_CELLS) CALL GET_CORNER_CELLS ()
321 ENDIF
322
323
324 CALL SET_CONSTPROP
325
326
327 CALL SET_IC
328
329
330 CALL SET_PS
331
332
333 CALL ZERO_NORM_VEL
334 CALL SET_BC0
335
336
337
338 IF(CARTESIAN_GRID) CALL CG_SET_BC0
339
340
341
342 CALL SET_MW_MIX_G
343
344
345 IF (RUN_TYPE == 'NEW') CALL SET_FLUIDBED_P
346
347
348 IF (RUN_TYPE == 'NEW') CALL SET_RO_G
349 IF (RUN_TYPE == 'NEW') CALL SET_RO_S
350
351
352 CALL SET_BC1
353
354
355 IF(.NOT.CARTESIAN_GRID) CALL CHECK_DATA_20
356
357
358
359
360
361 IF(CARTESIAN_GRID.AND.RE_INDEXING) THEN
362
363 IF(myPE == PE_IO) THEN
364 WRITE(*,"(72('='))")
365 WRITE(*,*)' RE-INDEXING CELLS FOR CARTESIAN GRID...'
366 ENDIF
367 CALL RE_INDEX_ARRAYS
368
369
370
371
372 CALL REPORT_BEST_PROCESSOR_SIZE
373
374
375
376 IF(myPE == PE_IO) WRITE(*,"(72('='))")
377
378
379
380 IF(RUN_TYPE == 'RESTART_2') THEN
381 CALL WRITE_RES1
382 DO L = 1, N_SPX
383 CALL WRITE_SPX0 (L, 0)
384 CALL WRITE_SPX1 (L, 0)
385 END DO
386 call write_netcdf(0,0,time)
387 ENDIF
388 ENDIF
389
390
391
392
393
394
395 IF(.NOT.CARTESIAN_GRID.AND.WRITE_VTK_FILES) CALL SETUP_VTK_NO_CUTCELL
396
397 IF(DISCRETE_ELEMENT) CALL MAKE_ARRAYS_DES
398 IF(QMOMK) CALL QMOMK_MAKE_ARRAYS
399
400
401 IF(DEM_SOLIDS) CALL SET_BC_DEM
402
403 IF(PIC_SOLIDS) CALL SET_BC_PIC
404
405
406 IF(DEM_SOLIDS) CALL SET_IC_DEM
407
408
409 if (DBGPRN_LAYOUT .or. bdist_io) then
410
411 call debug_write_layout()
412 call write_parallel_info()
413 endif
414
415
416 = 0.
417 CALL CPU_TIME (CPU1)
418 CPU_NLOG = CPU1
419 TIME_NLOG = TIME - DT
420
421
422 CALL CPU_TIME (CPU0)
423
424
425
426 CALL TIME_MARCH
427 IF(AUTO_RESTART.AND.AUTOMATIC_RESTART&
428 .AND.ITER_RESTART.LE.10) GOTO 101
429
430
431 IF (CALL_USR) CALL USR3
432
433
434
435 CALL CPU_TIME (CPU1)
436
437
438 = CPU1 - CPU0 - CPU_IO
439 WALLTIME_USED = WALL_TIME() - WALL0
440 CALL WRITE_OUT3 (CPUTIME_USED, WALLTIME_USED, CPU_IO)
441
442
443 IF(WRITE_DASHBOARD) THEN
444 IF(DT>=DT_MIN) THEN
445 RUN_STATUS = 'Complete.'
446 ELSE
447 RUN_STATUS = 'DT < DT_MIN. Recovery not possible!'
448 ENDIF
449 CALL GET_TUNIT(CPUTIME_USED,TUNIT)
450 CALL UPDATE_DASHBOARD(0,CPUTIME_USED,TUNIT)
451 ENDIF
452 IF(CARTESIAN_GRID) CALL CLOSE_CUT_CELL_FILES
453
454
455 call parallel_fin
456
457 CALL FINL_ERR_MSG
458
459 STOP
460
461 1000 FORMAT(/1X,'MFIX ',A,' Simulation:'/)
462
463 1010 FORMAT('Message 1010: Read in data from .RES file for TIME = ',&
464 G12.5,/'Time step number (NSTEP) =',I7)
465
466 END PROGRAM MFIX
467
468
469
470
471
472
473
474
475
476 SUBROUTINE GEN_LOG_BASENAME
477
478 use compar, only: myPE
479 use compar, only: fbname
480
481 implicit none
482
483
484 INTEGER :: i1, i10, i100, i1000, i10000
485
486
487 = int(myPE/10000)
488 i1000 = int((myPE-i10000*10000)/1000)
489 i100 = int((myPE-i10000*10000-i1000*1000)/100)
490 i10 = int((myPE-i10000*10000-i1000*1000-i100*100)/10)
491 i1 = int((myPE-i10000*10000-i1000*1000-i100*100-i10*10)/1)
492
493 i10000 = i10000 + 48
494 i1000 = i1000 + 48
495 i100 = i100 + 48
496 i10 = i10 + 48
497 i1 = i1 + 48
498
499 fbname=char(i10000)//char(i1000)//char(i100)//char(i10)//char(i1)
500
501 RETURN
502 END SUBROUTINE GEN_LOG_BASENAME
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526 SUBROUTINE debug_write_layout()
527
528
529
530
531 USE param
532 USE param1
533 USE parallel
534 USE matrix
535 USE geometry
536 USE compar
537 USE mpi_utility
538 USE sendrecv
539 USE sendrecv3
540 USE indices
541 USE leqsol
542 USE cdist
543 USE funits
544 USE run
545 USE time_cpu
546 USE functions
547 IMPLICIT NONE
548
549
550
551
552 INTEGER :: M
553
554 INTEGER :: i, j, k, ijk, ijk_GL, ijk_PROC, ijk_IO
555
556 integer :: indxA, indxA_gl, indxB, indxB_gl, indxC, indxC_gl
557 integer :: indxD, indxD_gl, indxE, indxE_gl, indxF, indxF_gl
558 integer :: indxG, indxG_gl, indxH, indxH_gl
559
560 logical :: amgdbg = .TRUE.
561
562 character(LEN=80) :: fname
563
564
565
566
567 = "layout_xxxxx.txt"
568 write (fname(8:12),'(i5.5)') myPE
569 open (unit=11,file=fname,status='unknown')
570
571 write (11,*) ' ********************************************'
572 write (11,*) ' ********************************************'
573 write (11,*) ' ********************************************'
574 write (11,*) ' ********************************************'
575 write (11,*) ' '
576 write (11,*) ' '
577 write (11,*) ' myPE = ' , myPE
578 write (11,*) ' '
579 write (11,*) ' '
580
581
582 IF (AMGDBG .OR. bDist_IO) THEN
583 write(11,"('BLK1: Running from istart3,iend3 .AND. jstart3, jend3 .AND. kstart3, kend3')")
584 write(11,"(' ( i , j, k) => ijk ijk_GL ijk_PROC ijk_IO')")
585 write(11,"(' ==================== ===== ======= ======== ======')")
586 DO k = kstart3, kend3
587 DO i = istart3,iend3
588 DO j = jstart3, jend3
589 ijk = FUNIJK(i,j,k)
590 ijk_GL = FUNIJK_GL(i,j,k)
591 ijk_PROC = FUNIJK_PROC(i,j,k,myPE)
592 ijk_IO = FUNIJK_IO(i,j,k)
593 write(11,"(' (',I4,' , ',I4,' , ',I4,') => ',4(I8,' , '))") &
594 i,j,k,ijk,ijk_GL,ijk_PROC,ijk_IO
595 ENDDO
596 ENDDO
597 ENDDO
598
599 write(11,"(/,/,'BLK2: Print out Bottom, South, West, East, North, Top neighbors')")
600 write(11,"(' ( i , j, k) => ijk ijk_GL B_of S_of W_of E_of N_of T_of')")
601 write(11,"(' ==================== ===== ======= ====== ====== ====== ====== ====== ======')")
602 DO k = kstart3, kend3
603 DO i = istart3,iend3
604 DO j = jstart3, jend3
605 ijk = FUNIJK(i,j,k)
606 ijk_GL = FUNIJK_GL(i,j,k)
607 write(11,"(' (',I4,' , ',I4,' , ',I4,') => ',2(I7,' , '),6(I7,2X))") &
608 i,j,k,ijk,ijk_GL,bottom_of(ijk),south_of(ijk),west_of(ijk),&
609 east_of(ijk),north_of(ijk),top_of(ijk)
610 ENDDO
611 ENDDO
612 ENDDO
613
614 write(11,"(/,/,'BLK3: Print out km, jm, im, ip, jp, kp neighbors')")
615 write(11,"(' ( i , j, k) => ijk ijk_GL km_of jm_of im_of ip_of jp_of kp_of')")
616 write(11,"(' ==================== ===== ======= ====== ====== ====== ====== ====== ======')")
617 DO k = kstart3, kend3
618 DO i = istart3,iend3
619 DO j = jstart3, jend3
620 ijk = FUNIJK(i,j,k)
621 ijk_GL = FUNIJK_GL(i,j,k)
622 write(11,"(' (',I4,' , ',I4,' , ',I4,') => ',2(I7,' , '),6(I7,2X))") &
623 i,j,k,ijk,ijk_GL,km_of(ijk),jm_of(ijk),im_of(ijk),&
624 ip_of(ijk),jp_of(ijk),kp_of(ijk)
625 ENDDO
626 ENDDO
627 ENDDO
628
629 write(11,"(/,'BLK4a: Active Fluid Cells:FLUID_AT(ijk)=.T.',/,&
630 & ' ( i , j, k) => ijk [ x , , z]')")
631 write(11,"(' ==================== ===== ====================')")
632 DO ijk = ijkstart3, ijkend3
633 I = I_OF(IJK)
634 J = J_OF(IJK)
635 K = K_OF(IJK)
636
637
638 IF (FLUID_AT(IJK)) THEN
639
640 write(11,"(' (',I4,' , ',I4,' , ',I4,') => ',I8,' [',E12.5,',',E12.5,' ]')") I,J,K,ijk,X(i),Z(k)
641 ENDIF
642 ENDDO
643
644 write(11,"(/,'BLK4b: Cells that are (.NOT.WALL_AT(IJK)) = .T.',/,&
645 & ' ( i , j, k) => ijk [ x , , z]')")
646 write(11,"(' ==================== ===== ====================')")
647 DO ijk = ijkstart3, ijkend3
648 I = I_OF(IJK)
649 J = J_OF(IJK)
650 K = K_OF(IJK)
651
652 IF (.NOT.WALL_AT(IJK)) THEN
653
654 write(11,"(' (',I4,' , ',I4,' , ',I4,') => ',I8,' [',E12.5,',',E12.5,' ]')") I,J,K,ijk,X(i),Z(k)
655 ENDIF
656 ENDDO
657
658 DO k = kstart3, kend3
659 DO i = istart3,iend3
660 DO j = jstart3, jend3
661 ijk = FUNIJK(i,j,k)
662 ijk_GL = FUNIJK_GL(i,j,k)
663
664 if (i == istart2 .AND. j == jstart2) then
665 indxA = ijk
666 indxA_gl = ijk_GL
667 endif
668 if (i == istart1 .AND. j == jstart1) then
669 indxE = ijk
670 indxE_gl = ijk_GL
671 endif
672 if (i == istart2 .AND. j == jend2) then
673 indxB = ijk
674 indxB_gl = ijk_GL
675 endif
676 if (i == istart1 .AND. j == jend1) then
677 indxF = ijk
678 indxF_gl = ijk_GL
679 endif
680 if (i == iend1 .AND. j == jstart1) then
681 indxH = ijk
682 indxH_gl = ijk_GL
683 endif
684 if (i == iend2 .AND. j == jstart2) then
685 indxD = ijk
686 indxD_gl = ijk_GL
687 endif
688 if (i == iend1 .AND. j == jend1) then
689 indxG = ijk
690 indxG_gl = ijk_GL
691 endif
692 if (i == iend2 .AND. j == jend2) then
693 indxC = ijk
694 indxC_gl = ijk_GL
695 endif
696 ENDDO
697 ENDDO
698 write(11,"('BLK5:')")
699 write(11,"(57('='))")
700 write(11,"('k= ',I5,/,57('='))") k
701 write(11,"('B= ',I5,' (',I7,')',20X,'C= ',I5,' (',I7,')',/)") indxB, indxB_gl, &
702 indxC, indxC_gl
703
704
705 write(11,"(3X,'F= ',I5,' (',I7,')',12X,'G= ',I5,' (',I7,')')") indxF, indxF_gl, &
706 indxG, indxG_gl
707 write(11,"(4(9X,'|',29X,'|',/))")
708 write(11,"(3X,'E= ',I5,' (',I7,')',12X,'H= ',I5,' (',I7,')',/)") indxE, indxE_gl, &
709 indxH, indxH_gl
710
711
712 write(11,"('A= ',I5,' (',I7,')',20X,'D= ',I5,' (',I7,')',/,/)") indxA, indxA_gl, &
713 indxD, indxD_gl
714
715
716
717
718
719 ENDDO
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735 endif
736
737 = 0
738
739
740 IF (AMGDBG .OR. bDist_IO) THEN
741 write(11,"(/,/,'BLK6: ========= ORIGINAL MFIX VARIABLES ===========')")
742 write(11,"('PE ',I5,': imin1 = ',I6,3X,'imax1= ',I6,/,'PE ',I5,': jmin1 = ',I6,3X,'jmax1= ',I6)") &
743 myPE,imin1,imax1,myPE,jmin1,jmax1
744 write(11,"('PE ',I5,': kmin1 = ',I6,3X,'kmax1= ',I6)") myPE,kmin1,kmax1
745 write(11,"('-----')")
746 write(11,"('PE ',I5,': imin2 = ',I6,3X,'imax2= ',I6,/,'PE ',I5,': jmin2 = ',I6,3X,'jmax2= ',I6)") &
747 myPE,imin2,imax2,myPE,jmin2,jmax2
748 write(11,"('PE ',I5,': kmin2 = ',I6,3X,'kmax2= ',I6)") myPE,kmin2,kmax2
749 write(11,"('----- Below xxx3 set is DMP extension ------------')")
750 write(11,"('PE ',I5,': imin3 = ',I6,3X,'imax3= ',I6,/,'PE ',I5,': jmin3 = ',I6,3X,'jmax3= ',I6)") &
751 myPE,imin3,imax3,myPE,jmin3,jmax3
752 write(11,"('PE ',I5,': kmin3 = ',I6,3X,'kmax3= ',I6)") myPE,kmin3,kmax3
753 write(11,"('----- End of Below xxx3 set is DMP extension -----')")
754
755 write(11,"('PE ',I5,': ijmax2 = ',I6)") myPE,ijmax2
756 write(11,"('PE ',I5,': ijkmin1= ',I6,' ijkmax1= ',I12)") myPE,ijkmin1, ijkmax1
757 write(11,"('PE ',I5,': ',6X,' ijkmax2= ',I12)") myPE,ijkmax2
758 write(11,"('PE ',I5,': ',6X,' ijkmax3= ',I12)") myPE,ijkmax3
759 write(11,"('PE ',I5,': ijkmin4= ',I6,' ijkmax4= ',I12)") myPE,ijkmin4, ijkmax4
760
761
762 write(11,"(/,/,' ========= DMP EXTENSION VARIABLES ===========')")
763
764 write(11,"('PE ',I5,': ijksize3 = ',I6,3X,'ijksize3_all = ',I6)") myPE,ijksize3,ijksize3_all(myPE)
765 write(11,"('PE ',I5,': ijksize4 = ',I6,3X,'ijksize4_all = ',I6)") myPE,ijksize4,ijksize4_all(myPE)
766 write(11,"('PE ',I5,': ijkstart3 = ',I6,3X,'ijkend3 = ',I6)") myPE,ijkstart3, ijkend3
767 write(11,"('PE ',I5,': ijkstart3_all = ',I6,3X,'ijkstart4_all = ',I6)") myPE,ijkstart3_all(myPE),ijkstart4_all(myPE)
768 write(11,"('PE ',I5,': istart_all = ',I6,3X,'iend_all = ',I6,/,'PE ',I5,': jstart_all = ',I6,3X,'jend_all = ',I6)") &
769 myPE,istart_all(myPE),iend_all(myPE),myPE,jstart_all(myPE),jend_all(myPE)
770 write(11,"('PE ',I5,': kstart_all = ',I6,3X,'kend_all = ',I6,/,'----------------------')") &
771 myPE,kstart_all(myPE),kend_all(myPE)
772
773 write(11,"('PE ',I5,': istart1_all= ',I6,3X,'iend1_all= ',I6,/,'PE ',I5,': jstart1_all= ',I6,3X,'jend3_all= ',I6)") &
774 myPE,istart1_all(myPE),iend1_all(myPE),myPE,jstart1_all(myPE),jend1_all(myPE)
775 write(11,"('PE ',I5,': kstart1_all= ',I6,3X,'kend1_all= ',I6,/,'----------------------')") &
776 myPE,kstart1_all(myPE),kend1_all(myPE)
777
778 write(11,"('PE ',I5,': istart2_all= ',I6,3X,'iend2_all= ',I6,/,'PE ',I5,': jstart2_all= ',I6,3X,'jend3_all= ',I6)") &
779 myPE,istart2_all(myPE),iend2_all(myPE),myPE,jstart2_all(myPE),jend2_all(myPE)
780 write(11,"('PE ',I5,': kstart2_all= ',I6,3X,'kend2_all= ',I6,/,'----------------------')") &
781 myPE,kstart2_all(myPE),kend2_all(myPE)
782
783 write(11,"('PE ',I5,': istart3_all= ',I6,3X,'iend3_all= ',I6,/,'PE ',I5,': jstart3_all= ',I6,3X,'jend3_all= ',I6)") &
784 myPE,istart3_all(myPE),iend3_all(myPE),myPE,jstart3_all(myPE),jend3_all(myPE)
785 write(11,"('PE ',I5,': kstart3_all= ',I6,3X,'kend3_all= ',I6,/,'----------------------')") &
786 myPE,kstart3_all(myPE),kend3_all(myPE)
787
788 write(11,"('PE ',I5,': istart1= ',I6,3X,'iend1= ',I6,/,'PE ',I5,': jstart1= ',I6,3X,'jend1= ',I6)") &
789 myPE,istart1,iend1,myPE,jstart1,jend1
790 write(11,"('PE ',I5,': kstart1= ',I6,3X,'kend1= ',I6,/,'----------------------')") &
791 myPE,kstart1,kend1
792 write(11,"('PE ',I5,': istart2= ',I6,3X,'iend2= ',I6,/,'PE ',I5,': jstart2= ',I6,3X,'jend2= ',I6)") &
793 myPE,istart2,iend2,myPE,jstart2,jend2
794 write(11,"('PE ',I5,': kstart2= ',I6,3X,'kend2= ',I6,/,'----------------------')") &
795 myPE,kstart2,kend2
796 write(11,"('PE ',I5,': istart3= ',I6,3X,'iend3= ',I6,/,'PE ',I5,': jstart3= ',I6,3X,'jend3= ',I6)") &
797 myPE,istart3,iend3,myPE,jstart3,jend3
798 write(11,"('PE ',I5,': kstart3= ',I6,3X,'kend3= ',I6,/,'----------------------')") &
799 myPE,kstart3,kend3
800
801 ENDIF
802
803 close(unit=11)
804
805
806 RETURN
807 END SUBROUTINE DEBUG_WRITE_LAYOUT
808
809
810
811
812
813
814
815 SUBROUTINE write_parallel_info()
816
817
818
819
820 USE param
821 USE param1
822 USE parallel
823 USE matrix
824 USE geometry
825 USE compar
826 USE mpi_utility
827 USE sendrecv
828 USE sendrecv3
829 USE indices
830 USE leqsol
831 USE funits
832 USE run
833 USE time_cpu
834 USE functions
835 IMPLICIT NONE
836
837
838
839
840
841
842 INTEGER :: M
843
844 INTEGER :: i, j, k, ijk, ijk_GL, ijk_PROC, ijk_IO
845
846 character(LEN=80) :: fname
847
848
849
850
851
852 = "p_info_xxxxx.txt"
853 write (fname(8:12),'(i5.5)') myPE
854 open (unit=11,file=fname,status='unknown')
855
856 write (11,*) myPe , ' = myPE'
857
858 write (11,*) myPE , istart3,iend3
859 write (11,*) myPE , jstart3,jend3
860 write (11,*) myPE , kstart3,kend3
861
862 write(11,"('BLK1: Running from istart3,iend3 .AND. jstart3, jend3 .AND. kstart3, kend3')")
863 write(11,"(' ( i , j, k) ijk ijk_GL ijk_PROC ijk_IO')")
864 write(11,"(' ==================== ===== ======= ======== ======')")
865 DO k = kstart3, kend3
866 DO i = istart3,iend3
867 DO j = jstart3, jend3
868 ijk = FUNIJK(i,j,k)
869 ijk_GL = FUNIJK_GL(i,j,k)
870 ijk_PROC = FUNIJK_PROC(i,j,k,myPE)
871 ijk_IO = FUNIJK_IO(i,j,k)
872 write(11,"(' ',I4,' ',I4,' ',I4,' ',4(I8,' '))" ) &
873 i,j,k,ijk,ijk_GL,ijk_PROC,ijk_IO
874 ENDDO
875 ENDDO
876 ENDDO
877
878 M = 0
879
880
881 close(unit=11)
882
883 RETURN
884 END SUBROUTINE write_parallel_info
885
886