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

Last change on this file since 1441 was 1310, checked in by raasch, 11 years ago

update of GPL copyright

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