source: palm/trunk/UTIL/combine_plot_fields_single_open.f90 @ 1468

Last change on this file since 1468 was 1468, checked in by maronga, 7 years ago

New flag files allow to force unscheduled termination/restarts of batch jobs, progress output is made for batch runs, small adjustments for lxce6 and lccrayh/lccrayb

  • Property svn:keywords set to Id
File size: 7.3 KB
Line 
1 PROGRAM combine_plot_fields
2
3!------------------------------------------------------------------------------!
4! This file is part of PALM.
5!
6! PALM is free software: you can redistribute it and/or modify it under the terms
7! of the GNU General Public License as published by the Free Software Foundation,
8! either version 3 of the License, or (at your option) any later version.
9!
10! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
11! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13!
14! You should have received a copy of the GNU General Public License along with
15! PALM. If not, see <http://www.gnu.org/licenses/>.
16!
17! Copyright 1997-2014  Leibniz Universitaet Hannover
18!--------------------------------------------------------------------------------!
19!
20! Current revisions:
21! -----------------
22! Adapted for use on up to 6-digit processor cores (not tested)
23!
24! Former revisions:
25! ---------------------
26! $Id: combine_plot_fields_single_open.f90 1468 2014-09-24 14:06:57Z maronga $
27!
28! code put under GPL (PALM 3.9)
29! Prozessordateien werden einzeln geoeffnet und geschlossen
30!
31! 23/02/99  Keine Bearbeitung komprimierter 3D-Daten
32! Ursprungsversion vom 28/07/97
33!
34!
35! Description:
36! -------------
37! Vereinigung der von PARLES im Parallelbetrieb erzeugten Teilfelder zu
38! gemeinsamen, das jeweilige Gesamtgebiet umfassenden Plotfeldern
39!-------------------------------------------------------------------------------!
40
41    IMPLICIT NONE
42
43!
44!-- Lokale Variablen
45    CHARACTER (LEN=2) ::  modus
46    CHARACTER (LEN=9) ::  id_char
47
48    INTEGER, PARAMETER ::  spk = SELECTED_REAL_KIND( 6 )
49
50    INTEGER ::  danz, fanz, id, nxa, nxag, nxe, nxeg, nya, nyag, nye, nyeg, &
51                nza, nzag, nze, nzeg, xa, xe, ya, ye, za, ze
52
53    LOGICAL ::  compressed, found
54
55    REAL ::  dx
56    REAL, DIMENSION(:),   ALLOCATABLE   ::  eta, ho, hu
57    REAL, DIMENSION(:,:), ALLOCATABLE   ::  pf
58    REAL(spk), DIMENSION(:,:,:), ALLOCATABLE ::  pf3d
59
60
61!
62!-- 2D-Felder fuer ISO2D
63!-- Hauptschleife ueber die 3 Schnittarten, beginnend mit xy-Schnitt
64    modus = 'XY'
65    PRINT*, ''
66    DO  WHILE ( modus == 'XY'  .OR.  modus == 'XZ'  .OR.  modus == 'YZ' )
67!
68!--    Pruefen, ob Basisdatei von PE0 vorhanden
69       danz = 0
70       WRITE (id_char,'(A2,''_'',I6.6)')  modus, danz
71       INQUIRE ( FILE='PLOT2D_'//id_char, EXIST=found )
72!
73!--    Anzahl der Dateien feststellen
74       DO  WHILE ( found )
75
76          danz = danz + 1
77          WRITE (id_char,'(A2,''_'',I6.6)')  modus, danz
78          INQUIRE ( FILE='PLOT2D_'//id_char, EXIST=found )
79
80       ENDDO
81!
82!--    Info-Ausgabe
83       PRINT*, ''
84       PRINT*, '*** combine_plot_fields ***'
85       IF ( danz /= 0 )  THEN
86          PRINT*, modus,'-Schnitt:  ', danz, ' Datei(en) gefunden'
87       ELSE
88          PRINT*, 'keine ', modus, '-Schnitte vorhanden'
89       ENDIF
90
91!
92!--    Einzelne Felder einlesen, bis keine mehr auf den Dateien vorhanden
93       fanz = 0
94       DO  WHILE ( danz /= 0 )
95
96!
97!--       Schleife ueber alle Dateien
98          DO  id = 0, danz-1
99!
100!--          Prozessordatei oeffnen
101             WRITE (id_char,'(A2,''_'',I6.6)')  modus, id
102             OPEN ( 1, FILE='PLOT2D_'//id_char, FORM='UNFORMATTED', &
103                       POSITION='ASIS' )
104
105!
106!--          Bei erster Datei und erstem eingelesenen Teilfeld Gesamtfeld
107!--          allokieren, Ausgabedatei oeffnen und Koordinateninformationen
108!--          schreiben
109             IF ( id == 0  .AND.  fanz == 0 )  THEN
110                READ ( 1 )  nxag, nxeg, nyag, nyeg
111                READ ( 1 )  nxa, nxe, nya, nye
112                ALLOCATE ( eta(nya:nye), ho(nxa:nxe), hu(nxa:nxe), &
113                           pf(nxag:nxeg,nyag:nyeg) )
114                READ ( 1 )  dx, eta, hu, ho
115
116                OPEN ( 2, FILE='PLOT2D_'//modus, FORM='UNFORMATTED' )
117                WRITE ( 2 )  dx, eta, hu, ho
118             ENDIF
119!
120!--          Teilfeld einlesen und ausgeben
121             READ ( 1, END=998 )  xa, xe, ya, ye
122!
123!--          Falls PE kein Teilfeld ausgegeben hat, sind Indices entsprechend
124!--          gesetzt
125             IF ( .NOT. ( xa == -1  .AND.  xe == -1  .AND. &
126                          ya == -1  .AND.  ye == -1 ) )  THEN
127                READ ( 1 )  pf(xa:xe,ya:ye)
128             ENDIF
129             IF ( id == 0 )  fanz = fanz + 1
130
131!
132!--          Prozessordatei schliessen
133             CLOSE ( 1 )
134
135          ENDDO
136!
137!--       Ausgabe des jeweiligen Gesamtfeldes
138          WRITE ( 2 )  pf(nxa:nxe,nya:nye)
139       
140       ENDDO
141
142998    IF ( danz /= 0 )  THEN
143!
144!--       Anzahl der bearbeiteten Felder ausgeben
145          PRINT*, modus, '-Schnitt:  ', fanz, ' Feld(er) ausgegeben'
146!
147!--       Dateien schliessen, allokierte Felder freigeben
148          CLOSE ( 1 )
149          CLOSE ( 2 )
150          DEALLOCATE ( eta, ho, hu, pf )
151       ENDIF
152!
153!--    Naechste Schnittebene
154       SELECT CASE ( modus )
155          CASE ( 'XY' )
156             modus = 'XZ'
157          CASE ( 'XZ' )
158             modus = 'YZ'
159          CASE ( 'YZ' )
160             modus = 'no'
161       END SELECT
162
163    ENDDO
164
165
166!
167!-- 3D-Felder fuer AVS
168!
169!-- Pruefen, ob Basisdatei von PE0 vorhanden
170    danz = 0
171    WRITE (id_char,'(I6.6)')  danz
172    INQUIRE ( FILE='PLOT3D_DATA_'//TRIM( id_char ), EXIST=found )
173
174!
175!-- Vereinigung darf nur erfolgen, wenn 3D-Daten unkomprimiert vorliegen
176    INQUIRE ( FILE='PLOT3D_COMPRESSED', EXIST=compressed )
177
178!
179!-- Anzahl der Dateien feststellen
180    DO  WHILE ( found  .AND.  .NOT. compressed )
181
182       danz = danz + 1
183       WRITE (id_char,'(I6.6)')  danz
184       INQUIRE ( FILE='PLOT3D_DATA_'//TRIM( id_char ), EXIST=found )
185
186    ENDDO
187
188!
189!-- Info-Ausgabe
190    PRINT*, ' '
191    PRINT*, '*** combine_plot_fields ***'
192    IF ( danz /= 0 )  THEN
193       PRINT*, '3D-Ausgabe:  ', danz, ' Datei(en) gefunden'
194    ELSE
195       IF ( found .AND. compressed )  THEN
196          PRINT*, '3D-Ausgabe nicht vorgenommen, da Daten komprimiert vorliegen'
197       ELSE
198          PRINT*, 'keine 3D-Ausgaben vorhanden'
199       ENDIF
200    ENDIF
201
202!
203!-- Einzelne Felder einlesen, bis keine mehr auf den Dateien vorhanden
204    fanz = 0
205    DO  WHILE ( danz /= 0 )
206
207!
208!--    Schleife ueber alle Dateien
209       DO  id = 0, danz-1
210!
211!--       Prozessordatei oeffnen
212          WRITE (id_char,'(I6.6)')  id
213          OPEN ( 1, FILE='PLOT3D_DATA_'//TRIM( id_char ), FORM='UNFORMATTED', &
214                    POSITION='ASIS' )
215!
216!--       Bei erster Datei und erstem eingelesenen Teilfeld Gesamtfeld
217!--       allokieren und Ausgabedatei oeffnen
218          IF ( id == 0  .AND.  fanz == 0 )  THEN
219             READ ( 1 )  nxag, nxeg, nyag, nyeg, nzag, nzeg
220             READ ( 1 )  nxa, nxe, nya, nye, nza, nze
221             ALLOCATE ( pf3d(nxag:nxeg,nyag:nyeg,nzag:nzeg) )
222             OPEN ( 2, FILE='PLOT3D_DATA', FORM='UNFORMATTED' )
223          ENDIF
224!
225!--       Teilfeld einlesen und ausgeben
226          READ ( 1, END=999 )  xa, xe, ya, ye, za, ze
227          READ ( 1 )  pf3d(xa:xe,ya:ye,za:ze)
228          IF ( id == 0 )  fanz = fanz + 1
229
230!
231!--       Prozessordatei schliessen
232          CLOSE ( 1 )
233
234       ENDDO
235!
236!--    Ausgabe des jeweiligen Gesamtfeldes
237       WRITE ( 2 )  pf3d(nxa:nxe,nya:nye,nza:nze)
238       
239    ENDDO
240
241999 IF ( danz /= 0 )  THEN
242!
243!--    Anzahl der bearbeiteten Felder ausgeben
244       PRINT*, '3D-Ausgabe:  ', fanz, ' Feld(er) ausgegeben'
245!
246!--    Dateien schliessen, allokierte Felder freigeben
247       CLOSE ( 1 )
248       CLOSE ( 2 )
249       DEALLOCATE ( pf3d )
250    ENDIF
251
252 END PROGRAM combine_plot_fields
Note: See TracBrowser for help on using the repository browser.