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

Last change on this file since 1046 was 1046, checked in by maronga, 9 years ago

put scripts and utilities under GPL

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