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

Last change on this file since 2696 was 2696, checked in by kanani, 4 years ago

Merge of branch palm4u into trunk

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