Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RADI_rFLO_WriteSolution.F90
Go to the documentation of this file.
1 ! *********************************************************************
2 ! * Rocstar Simulation Suite *
3 ! * Copyright@2015, Illinois Rocstar LLC. All rights reserved. *
4 ! * *
5 ! * Illinois Rocstar LLC *
6 ! * Champaign, IL *
7 ! * www.illinoisrocstar.com *
8 ! * sales@illinoisrocstar.com *
9 ! * *
10 ! * License: See LICENSE file in top level of distribution package or *
11 ! * http://opensource.org/licenses/NCSA *
12 ! *********************************************************************
13 ! *********************************************************************
14 ! * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
15 ! * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES *
16 ! * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
17 ! * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR *
18 ! * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
19 ! * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
20 ! * Arising FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
21 ! * USE OR OTHER DEALINGS WITH THE SOFTWARE. *
22 ! *********************************************************************
23 !******************************************************************************
24 !
25 ! Purpose: write radiation solution, extinction coefficients and intensities,
26 ! to file
27 !
28 ! Description: the following solution formats are supported:
29 ! - RocfloMP ASCII
30 ! - RocfloMP binary.
31 !
32 ! Input: regions = dimensions and cons. variables of all regions
33 ! global%currentTime = physical time
34 ! global%resInit = initial residual.
35 !
36 ! Output: to file.
37 !
38 ! Notes: solution is stored only for the current grid level; it is also
39 ! stored for all dummy cells. All regions are written into one file.
40 !
41 !******************************************************************************
42 !
43 ! $Id: RADI_rFLO_WriteSolution.F90,v 1.4 2008/12/06 08:44:38 mtcampbe Exp $
44 !
45 ! Copyright: (c) 2001 by the University of Illinois
46 !
47 !******************************************************************************
48 
49 SUBROUTINE radi_rflo_writesolution( regions )
50 
51  USE moddatatypes
52  USE moddatastruct, ONLY : t_region
53  USE modglobal, ONLY : t_global
57  USE moderror
58  USE modmpi
59  USE modparameters
61  IMPLICIT NONE
62 
63 #include "Indexing.h"
64 
65 ! ... parameters
66  TYPE(t_region), POINTER :: regions(:)
67 
68 ! ... loop variables
69  INTEGER :: ireg, i, j, k, l, n
70 
71 ! ... local variables
72  TYPE(t_global), POINTER :: global
73 
74  CHARACTER(2*CHRLEN+17) :: fname
75 
76 #ifdef MPI
77  INTEGER :: status(mpi_status_size)
78 #endif
79  INTEGER :: ilev, iregfile, ipc, jpc, kpc, ndumcells
80  INTEGER :: icoff, ijcoff, ijkc, inoff, ijnoff, ijkn, ijkni, ijknj, ijknk
81  INTEGER :: idcbeg, jdcbeg, kdcbeg, idcend, jdcend, kdcend, ijkbeg, ijkend
82  INTEGER :: nang, ndimc, nrvar, nsolcomp, errorflag
83  INTEGER, ALLOCATABLE :: ivar(:,:)
84 
85  REAL(RFREAL), POINTER :: radint(:,:), radcoef(:,:), qri(:),qrj(:),qrk(:)
86  REAL(RFREAL), POINTER :: rcv(:,:)
87  REAL(RFREAL), ALLOCATABLE :: rvar(:,:), solfile(:,:)
88 
89 !******************************************************************************
90 
91  global => regions(1)%global
92 
93  CALL registerfunction( global,'RADI_RFLO_WriteSolution',&
94  'RADI_rFLO_WriteSolution.F90' )
95 
96 ! allocate fixed-size temporary data arrays -----------------------------------
97 
98  nrvar = 2
99 
100  ALLOCATE( ivar(5,1),stat=errorflag )
101  ALLOCATE( rvar(nrvar,1),stat=errorflag )
102  global%error = errorflag
103  IF (global%error /= 0) CALL errorstop( global,err_allocate,__line__ )
104 
105 ! open solution file (only master proc.) --------------------------------------
106 
107  IF (global%myProcid == masterproc) THEN
108 
109 ! - unsteady flow
110 
111  IF (global%flowType == flow_unsteady) THEN
112  IF (global%solutFormat == format_ascii) THEN
113  WRITE(fname,'(A,1PE11.5)') trim(global%outDir)//trim(global%casename)//'.rada_', &
114  global%currentTime
115  OPEN(if_solut,file=fname,form='formatted',status='unknown', &
116  iostat=errorflag)
117  ELSE IF (global%solutFormat == format_binary) THEN
118  WRITE(fname,'(A,1PE11.5)') trim(global%outDir)//trim(global%casename)//'.radb_', &
119  global%currentTime
120  OPEN(if_solut,file=fname,form='unformatted',status='unknown', &
121  iostat=errorflag)
122  ELSE
123  CALL errorstop( global,err_unknown_format,__line__ )
124  ENDIF
125  rvar(1,1) = global%currentTime
126  rvar(2,1) = 1._rfreal
127 
128 ! - steady flow
129 
130  ELSE
131  IF (global%solutFormat == format_ascii) THEN
132  WRITE(fname,'(A,I6.6)') trim(global%outDir)//trim(global%casename)//'.rada_', &
133  global%currentIter
134  OPEN(if_solut,file=fname,form='formatted',status='unknown', &
135  iostat=errorflag)
136  ELSE IF (global%solutFormat == format_binary) THEN
137  WRITE(fname,'(A,I6.6)') trim(global%outDir)//trim(global%casename)//'.radb_', &
138  global%currentIter
139  OPEN(if_solut,file=fname,form='unformatted',status='unknown', &
140  iostat=errorflag)
141  ELSE
142  CALL errorstop( global,err_unknown_format,__line__ )
143  ENDIF
144  rvar(1,1) = 0._rfreal
145  rvar(2,1) = global%resInit
146  ENDIF
147 
148  global%error = errorflag
149  IF (global%error /= 0) &
150  CALL errorstop( global,err_file_open,__line__,'File: '//trim(fname) )
151 
152  ENDIF ! MASTERPROC
153 
154 ! write time and initial residual to file -------------------------------------
155 
156  IF (global%myProcid == masterproc) THEN
157  CALL rflo_writedatafilereal( global,if_solut,global%solutFormat,nrvar,1,rvar )
158  ENDIF
159 
160 ! write solution data ---------------------------------------------------------
161 
162  DO ireg=1,global%nRegions
163 
164 ! - get dimensions and pointers
165 
166  ilev = regions(ireg)%currLevel
167  CALL rflo_getdimensdummy( regions(ireg),ilev,idcbeg,idcend, &
168  jdcbeg,jdcend,kdcbeg,kdcend )
169  CALL rflo_getcelloffset( regions(ireg),ilev,icoff,ijcoff )
170  CALL rflo_getnodeoffset( regions(ireg),ilev,inoff,ijnoff )
171  ijkbeg = indijk(idcbeg,jdcbeg,kdcbeg,icoff,ijcoff)
172  ijkend = indijk(idcend,jdcend,kdcend,icoff,ijcoff)
173  ndimc = ijkend - ijkbeg + 1
174 
175 ! - allocate memory for data field
176 
177  nang = regions(ireg)%radiInput%nAng
178  nsolcomp = 3+radi_coeff_ncomp+nang
179 
180  IF (regions(ireg)%radiInput%radiModel == radi_model_fldtran) THEN
181  nsolcomp = nsolcomp+1
182  ENDIF
183 
184  IF (regions(ireg)%procid==global%myProcid .OR. &
185  global%myProcid==masterproc) THEN
186  ALLOCATE( solfile(nsolcomp,ndimc),stat=errorflag )
187  global%error = errorflag
188  IF (global%error /= 0) CALL errorstop( global,err_allocate,__line__ )
189  ENDIF
190 
191 ! - copy solution into data structure
192 
193  IF (regions(ireg)%procid == global%myProcid) THEN
194  IF (regions(ireg)%mixtInput%radiUsed) THEN
195  qri => regions(ireg)%levels(ilev)%radi%qri
196  qrj => regions(ireg)%levels(ilev)%radi%qrj
197  qrk => regions(ireg)%levels(ilev)%radi%qrk
198  radint => regions(ireg)%levels(ilev)%radi%radInt
199  radcoef => regions(ireg)%levels(ilev)%radi%radCoef
200  n = 0
201  IF (regions(ireg)%radiInput%radiModel /= radi_model_fldtran) THEN
202  DO k=kdcbeg,kdcend
203  DO j=jdcbeg,jdcend
204  DO i=idcbeg,idcend
205  n = n + 1
206  ijkc = indijk(i,j,k,icoff,ijcoff)
207  ijkn = indijk(i,j,k,inoff,ijnoff)
208  ijkni= indijk(i+1,j,k,inoff,ijnoff)
209  ijknj= indijk(i,j+1,k,inoff,ijnoff)
210  ijknk= indijk(i,j,k+1,inoff,ijnoff)
211  solfile(1,n) = 0.5_rfreal*(qri(ijkn)+qri(ijkni))
212  solfile(2,n) = 0.5_rfreal*(qrj(ijkn)+qrj(ijknj))
213  solfile(3,n) = 0.5_rfreal*(qrk(ijkn)+qrk(ijknk))
214  solfile(4,n) = radcoef(ijkc,radi_coeff_extinct)
215  solfile(5,n) = radcoef(ijkc,radi_coeff_scatter)
216  DO l = 1,nang
217  solfile(5+l,n) = radint(l,ijkc)
218  ENDDO ! l
219  ENDDO ! i
220  ENDDO ! j
221  ENDDO ! k
222  ELSE
223  rcv => regions(ireg)%levels(ilev)%radi%cv
224 
225  DO k=kdcbeg,kdcend
226  DO j=jdcbeg,jdcend
227  DO i=idcbeg,idcend
228  n = n + 1
229  ijkc = indijk(i,j,k,icoff,ijcoff)
230  ijkn = indijk(i,j,k,inoff,ijnoff)
231  ijkni= indijk(i+1,j,k,inoff,ijnoff)
232  ijknj= indijk(i,j+1,k,inoff,ijnoff)
233  ijknk= indijk(i,j,k+1,inoff,ijnoff)
234  solfile(1,n) = rcv(cv_radi_ener,ijkc)
235  solfile(2,n) = 0.5_rfreal*(qri(ijkn)+qri(ijkni))
236  solfile(3,n) = 0.5_rfreal*(qrj(ijkn)+qrj(ijknj))
237  solfile(4,n) = 0.5_rfreal*(qrk(ijkn)+qrk(ijknk))
238  solfile(5,n) = radcoef(ijkc,radi_coeff_extinct)
239  solfile(6,n) = radcoef(ijkc,radi_coeff_scatter)
240  DO l = 1,nang
241  solfile(6+l,n) = radint(l,ijkc)
242  ENDDO ! l
243  ENDDO ! i
244  ENDDO ! j
245  ENDDO ! k
246  ENDIF ! radiModel
247  ELSE ! radiUsed
248  solfile = 0._rfreal
249  ENDIF
250  ENDIF ! global%myProcid
251 
252 ! - write region number and dimensions (only master)
253 
254  IF (global%myProcid == masterproc) THEN
255  ivar(1,1) = ireg
256  ivar(2,1) = regions(ireg)%levels(ilev)%grid%ipc
257  ivar(3,1) = regions(ireg)%levels(ilev)%grid%jpc
258  ivar(4,1) = regions(ireg)%levels(ilev)%grid%kpc
259  ivar(5,1) = regions(ireg)%nDumCells
260  CALL rflo_writedatafileint( global,if_solut,global%solutFormat,5,1,ivar )
261  ENDIF
262 
263 ! - master receives and writes data, others send them
264 
265  IF (global%myProcid == masterproc) THEN
266 #ifdef MPI
267  IF (regions(ireg)%procid /= masterproc) THEN
268  CALL mpi_recv( solfile, nsolcomp*ndimc,mpi_rfreal, &
269  regions(ireg)%procid,ireg, &
270  global%mpiComm,status,global%mpierr )
271  IF (global%mpierr /=0 ) CALL errorstop( global,err_mpi_trouble,__line__ )
272  ENDIF
273 #endif
274  CALL rflo_writedatafilereal( global,if_solut,global%solutFormat, &
275  nsolcomp,ndimc,solfile )
276  ELSE ! not the master
277 #ifdef MPI
278  IF (regions(ireg)%procid == global%myProcid) THEN
279  CALL mpi_send( solfile,nsolcomp*ndimc,mpi_rfreal, &
280  masterproc,ireg,global%mpiComm,global%mpierr )
281  IF (global%mpierr /=0 ) CALL errorstop( global,err_mpi_trouble,__line__ )
282  ENDIF
283 #endif
284  ENDIF
285 
286  IF (ALLOCATED(solfile)) THEN
287  DEALLOCATE( solfile,stat=errorflag )
288  global%error = errorflag
289  IF (global%error /= 0) CALL errorstop( global,err_deallocate,__line__ )
290  ENDIF
291 
292  ENDDO ! iReg
293 
294 ! finalize --------------------------------------------------------------------
295 
296  IF (global%myProcid == masterproc) THEN
297  CLOSE(if_solut,iostat=errorflag)
298  global%error = errorflag
299  IF (global%error /= 0) &
300  CALL errorstop( global,err_file_close,__line__,'File: '//trim(fname) )
301  ENDIF
302 
303  CALL deregisterfunction( global )
304 
305 END SUBROUTINE radi_rflo_writesolution
306 
307 !******************************************************************************
308 !
309 ! RCS Revision history:
310 !
311 ! $Log: RADI_rFLO_WriteSolution.F90,v $
312 ! Revision 1.4 2008/12/06 08:44:38 mtcampbe
313 ! Updated license.
314 !
315 ! Revision 1.3 2008/11/19 22:17:51 mtcampbe
316 ! Added Illinois Open Source License/Copyright
317 !
318 ! Revision 1.2 2004/09/30 17:49:10 wasistho
319 ! prepared for full FLD radiation model
320 !
321 ! Revision 1.1 2004/09/23 03:51:12 wasistho
322 ! changed RADI_WriteSol.. to RADI_RFLO_WriteSol..
323 !
324 ! Revision 1.1 2004/09/22 02:35:50 wasistho
325 ! changed file nomenclature from lower to upper case
326 !
327 ! Revision 1.4 2003/08/11 21:52:31 wasistho
328 ! added cell avg. radiation fluxes to output solution
329 !
330 ! Revision 1.3 2003/07/30 22:24:08 wasistho
331 ! enter part and smoke data into radiation
332 !
333 ! Revision 1.2 2003/07/22 03:05:58 wasistho
334 ! include logical write-parameter
335 !
336 ! Revision 1.1 2003/07/17 01:16:59 wasistho
337 ! initial activation rocrad
338 !
339 !
340 !******************************************************************************
341 
342 
343 
344 
345 
346 
347 
348 
349 
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE idcend
subroutine rflo_writedatafileint(global, fileId, form, nDim1, nDim2, ivar)
j indices k indices k
Definition: Indexing.h:6
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
int status() const
Obtain the status of the attribute.
Definition: Attribute.h:240
subroutine rflo_getnodeoffset(region, iLev, iNodeOffset, ijNodeOffset)
subroutine rflo_getdimensdummy(region, iLev, idcbeg, idcend, jdcbeg, jdcend, kdcbeg, kdcend)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE kdcbeg
blockLoc i
Definition: read.cpp:79
subroutine rflo_getcelloffset(region, iLev, iCellOffset, ijCellOffset)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE idcbeg
subroutine radi_rflo_writesolution(regions)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE form
const NT & n
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE jdcend
j indices j
Definition: Indexing.h:6
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE jdcbeg
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
subroutine rflo_writedatafilereal(global, fileId, form, nDim1, nDim2, var)
subroutine deregisterfunction(global)
Definition: ModError.F90:469