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

Last change on this file since 4751 was 4481, checked in by maronga, 5 years ago

Bugfix for copyright updates in document_changes; copyright update applied to all files

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