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

Last change on this file since 1922 was 1469, checked in by maronga, 10 years ago

last commit documented

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