source: palm/trunk/UTIL/combine_plot_fields_single_open.f90

Last change on this file was 4843, checked in by raasch, 21 months ago

local namelist parameter added to switch off the module although the respective module namelist appears in the namelist file, further copyright updates

  • 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-2021  Leibniz Universitaet Hannover
19!------------------------------------------------------------------------------!
20!
21! Current revisions:
22! -----------------
23!
24!
25! Former revisions:
26! ---------------------
27! $Id: combine_plot_fields_single_open.f90 4843 2021-01-15 15:22:11Z banzhafs $
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.