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

Last change on this file since 841 was 1, checked in by raasch, 18 years ago

Initial repository layout and content

File size: 6.4 KB
Line 
1 PROGRAM combine_plot_fields
2
3!-------------------------------------------------------------------------------!
4! Aktuelle Aenderungen:
5! ---------------------
6! Prozessordateien werden einzeln geoeffnet und geschlossen
7!
8! Fruehere Aenderungen:
9! ---------------------
10! 23/02/99  Keine Bearbeitung komprimierter 3D-Daten
11! Ursprungsversion vom 28/07/97
12!
13!
14! Beschreibung:
15! -------------
16! Vereinigung der von PARLES im Parallelbetrieb erzeugten Teilfelder zu
17! gemeinsamen, das jeweilige Gesamtgebiet umfassenden Plotfeldern
18!-------------------------------------------------------------------------------!
19
20    IMPLICIT NONE
21
22!
23!-- Lokale Variablen
24    CHARACTER (LEN=2) ::  modus
25    CHARACTER (LEN=7) ::  id_char
26
27    INTEGER, PARAMETER ::  spk = SELECTED_REAL_KIND( 6 )
28
29    INTEGER ::  danz, fanz, id, nxa, nxag, nxe, nxeg, nya, nyag, nye, nyeg, &
30                nza, nzag, nze, nzeg, xa, xe, ya, ye, za, ze
31
32    LOGICAL ::  compressed, found
33
34    REAL ::  dx
35    REAL, DIMENSION(:),   ALLOCATABLE   ::  eta, ho, hu
36    REAL, DIMENSION(:,:), ALLOCATABLE   ::  pf
37    REAL(spk), DIMENSION(:,:,:), ALLOCATABLE ::  pf3d
38
39
40!
41!-- 2D-Felder fuer ISO2D
42!-- Hauptschleife ueber die 3 Schnittarten, beginnend mit xy-Schnitt
43    modus = 'XY'
44    PRINT*, ''
45    DO  WHILE ( modus == 'XY'  .OR.  modus == 'XZ'  .OR.  modus == 'YZ' )
46!
47!--    Pruefen, ob Basisdatei von PE0 vorhanden
48       danz = 0
49       WRITE (id_char,'(A2,''_'',I4.4)')  modus, danz
50       INQUIRE ( FILE='PLOT2D_'//id_char, EXIST=found )
51!
52!--    Anzahl der Dateien feststellen
53       DO  WHILE ( found )
54
55          danz = danz + 1
56          WRITE (id_char,'(A2,''_'',I4.4)')  modus, danz
57          INQUIRE ( FILE='PLOT2D_'//id_char, EXIST=found )
58
59       ENDDO
60!
61!--    Info-Ausgabe
62       PRINT*, ''
63       PRINT*, '*** combine_plot_fields ***'
64       IF ( danz /= 0 )  THEN
65          PRINT*, modus,'-Schnitt:  ', danz, ' Datei(en) gefunden'
66       ELSE
67          PRINT*, 'keine ', modus, '-Schnitte vorhanden'
68       ENDIF
69
70!
71!--    Einzelne Felder einlesen, bis keine mehr auf den Dateien vorhanden
72       fanz = 0
73       DO  WHILE ( danz /= 0 )
74
75!
76!--       Schleife ueber alle Dateien
77          DO  id = 0, danz-1
78!
79!--          Prozessordatei oeffnen
80             WRITE (id_char,'(A2,''_'',I4.4)')  modus, id
81             OPEN ( 1, FILE='PLOT2D_'//id_char, FORM='UNFORMATTED', &
82                       POSITION='ASIS' )
83
84!
85!--          Bei erster Datei und erstem eingelesenen Teilfeld Gesamtfeld
86!--          allokieren, Ausgabedatei oeffnen und Koordinateninformationen
87!--          schreiben
88             IF ( id == 0  .AND.  fanz == 0 )  THEN
89                READ ( 1 )  nxag, nxeg, nyag, nyeg
90                READ ( 1 )  nxa, nxe, nya, nye
91                ALLOCATE ( eta(nya:nye), ho(nxa:nxe), hu(nxa:nxe), &
92                           pf(nxag:nxeg,nyag:nyeg) )
93                READ ( 1 )  dx, eta, hu, ho
94
95                OPEN ( 2, FILE='PLOT2D_'//modus, FORM='UNFORMATTED' )
96                WRITE ( 2 )  dx, eta, hu, ho
97             ENDIF
98!
99!--          Teilfeld einlesen und ausgeben
100             READ ( 1, END=998 )  xa, xe, ya, ye
101!
102!--          Falls PE kein Teilfeld ausgegeben hat, sind Indices entsprechend
103!--          gesetzt
104             IF ( .NOT. ( xa == -1  .AND.  xe == -1  .AND. &
105                          ya == -1  .AND.  ye == -1 ) )  THEN
106                READ ( 1 )  pf(xa:xe,ya:ye)
107             ENDIF
108             IF ( id == 0 )  fanz = fanz + 1
109
110!
111!--          Prozessordatei schliessen
112             CLOSE ( 1 )
113
114          ENDDO
115!
116!--       Ausgabe des jeweiligen Gesamtfeldes
117          WRITE ( 2 )  pf(nxa:nxe,nya:nye)
118       
119       ENDDO
120
121998    IF ( danz /= 0 )  THEN
122!
123!--       Anzahl der bearbeiteten Felder ausgeben
124          PRINT*, modus, '-Schnitt:  ', fanz, ' Feld(er) ausgegeben'
125!
126!--       Dateien schliessen, allokierte Felder freigeben
127          CLOSE ( 1 )
128          CLOSE ( 2 )
129          DEALLOCATE ( eta, ho, hu, pf )
130       ENDIF
131!
132!--    Naechste Schnittebene
133       SELECT CASE ( modus )
134          CASE ( 'XY' )
135             modus = 'XZ'
136          CASE ( 'XZ' )
137             modus = 'YZ'
138          CASE ( 'YZ' )
139             modus = 'no'
140       END SELECT
141
142    ENDDO
143
144
145!
146!-- 3D-Felder fuer AVS
147!
148!-- Pruefen, ob Basisdatei von PE0 vorhanden
149    danz = 0
150    WRITE (id_char,'(I4.4)')  danz
151    INQUIRE ( FILE='PLOT3D_DATA_'//TRIM( id_char ), EXIST=found )
152
153!
154!-- Vereinigung darf nur erfolgen, wenn 3D-Daten unkomprimiert vorliegen
155    INQUIRE ( FILE='PLOT3D_COMPRESSED', EXIST=compressed )
156
157!
158!-- Anzahl der Dateien feststellen
159    DO  WHILE ( found  .AND.  .NOT. compressed )
160
161       danz = danz + 1
162       WRITE (id_char,'(I4.4)')  danz
163       INQUIRE ( FILE='PLOT3D_DATA_'//TRIM( id_char ), EXIST=found )
164
165    ENDDO
166
167!
168!-- Info-Ausgabe
169    PRINT*, ' '
170    PRINT*, '*** combine_plot_fields ***'
171    IF ( danz /= 0 )  THEN
172       PRINT*, '3D-Ausgabe:  ', danz, ' Datei(en) gefunden'
173    ELSE
174       IF ( found .AND. compressed )  THEN
175          PRINT*, '3D-Ausgabe nicht vorgenommen, da Daten komprimiert vorliegen'
176       ELSE
177          PRINT*, 'keine 3D-Ausgaben vorhanden'
178       ENDIF
179    ENDIF
180
181!
182!-- Einzelne Felder einlesen, bis keine mehr auf den Dateien vorhanden
183    fanz = 0
184    DO  WHILE ( danz /= 0 )
185
186!
187!--    Schleife ueber alle Dateien
188       DO  id = 0, danz-1
189!
190!--       Prozessordatei oeffnen
191          WRITE (id_char,'(I4.4)')  id
192          OPEN ( 1, FILE='PLOT3D_DATA_'//TRIM( id_char ), FORM='UNFORMATTED', &
193                    POSITION='ASIS' )
194!
195!--       Bei erster Datei und erstem eingelesenen Teilfeld Gesamtfeld
196!--       allokieren und Ausgabedatei oeffnen
197          IF ( id == 0  .AND.  fanz == 0 )  THEN
198             READ ( 1 )  nxag, nxeg, nyag, nyeg, nzag, nzeg
199             READ ( 1 )  nxa, nxe, nya, nye, nza, nze
200             ALLOCATE ( pf3d(nxag:nxeg,nyag:nyeg,nzag:nzeg) )
201             OPEN ( 2, FILE='PLOT3D_DATA', FORM='UNFORMATTED' )
202          ENDIF
203!
204!--       Teilfeld einlesen und ausgeben
205          READ ( 1, END=999 )  xa, xe, ya, ye, za, ze
206          READ ( 1 )  pf3d(xa:xe,ya:ye,za:ze)
207          IF ( id == 0 )  fanz = fanz + 1
208
209!
210!--       Prozessordatei schliessen
211          CLOSE ( 1 )
212
213       ENDDO
214!
215!--    Ausgabe des jeweiligen Gesamtfeldes
216       WRITE ( 2 )  pf3d(nxa:nxe,nya:nye,nza:nze)
217       
218    ENDDO
219
220999 IF ( danz /= 0 )  THEN
221!
222!--    Anzahl der bearbeiteten Felder ausgeben
223       PRINT*, '3D-Ausgabe:  ', fanz, ' Feld(er) ausgegeben'
224!
225!--    Dateien schliessen, allokierte Felder freigeben
226       CLOSE ( 1 )
227       CLOSE ( 2 )
228       DEALLOCATE ( pf3d )
229    ENDIF
230
231 END PROGRAM combine_plot_fields
Note: See TracBrowser for help on using the repository browser.