Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RFLO_ModPatchAeroCoeffs.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: Collection of routines for patch aerodynamic coefficients.
26 !
27 ! Description: None.
28 !
29 ! Notes: None.
30 !
31 ! ******************************************************************************
32 !
33 ! $Id: RFLO_ModPatchAeroCoeffs.F90,v 1.5 2008/12/06 08:44:17 mtcampbe Exp $
34 !
35 ! Copyright: (c) 2004 by the University of Illinois
36 !
37 ! ******************************************************************************
38 
40 
41  USE modglobal, ONLY : t_global
42  USE moddatastruct, ONLY: t_region
43  USE modgrid, ONLY : t_grid
44  USE modbndpatch, ONLY : t_patch
45  USE modparameters
46  USE moddatatypes
47  USE moderror
48  USE modmpi
49 
50  IMPLICIT NONE
51 
52  PRIVATE
53  PUBLIC :: rflo_initpatchaerocoeffs, &
57 
58 ! private :
59 
60 ! ******************************************************************************
61 ! Declarations and definitions
62 ! ******************************************************************************
63 
64  CHARACTER(CHRLEN) :: RCSIdentString = &
65  '$RCSfile: RFLO_ModPatchAeroCoeffs.F90,v $ $Revision: 1.5 $'
66 
67 ! ******************************************************************************
68 ! Routines
69 ! ******************************************************************************
70 
71  CONTAINS
72 
73 
74 ! *******************************************************************************
75 !
76 ! Purpose: Initialize patch aerodynamic coefficients.
77 !
78 ! Description: None.
79 !
80 ! Input:
81 ! region = current region data
82 ! patch = current patch data
83 !
84 ! Output: None.
85 !
86 ! Notes: None.
87 !
88 ! ******************************************************************************
89 
90  SUBROUTINE rflo_initpatchaerocoeffs( region,patch )
91 
92  IMPLICIT NONE
93 
94 #include "Indexing.h"
95 
96 ! ... parameters
97  TYPE(t_region) :: region
98  TYPE(t_patch) :: patch
99 
100 ! ... loop variables
101 
102 ! ... local variables
103 
104 !********************************************************************************
105 
106  CALL registerfunction( region%global,&
107  'RFLO_InitPatchAeroCoeffs',&
108  'RFLO_ModPatchAeroCoeffs.F90' )
109 
110 ! set initial patch aero coeffs values to 0.0 -----------------------------------
111 
112  patch%cp = 0.0_rfreal
113  patch%cf = 0.0_rfreal
114  patch%ch = 0.0_rfreal
115  patch%forceCoeffs = 0.0_rfreal
116  patch%momentCoeffs = 0.0_rfreal
117 
118 ! finalize ----------------------------------------------------------------------
119 
120  CALL deregisterfunction(region%global)
121 
122 END SUBROUTINE rflo_initpatchaerocoeffs
123 
124 
125 
126 ! *******************************************************************************
127 !
128 ! Purpose: Read patch coefficients.
129 !
130 ! Description: the following solution formats are supported:
131 ! - RocfloMP ASCII
132 ! - RocfloMP binary.
133 !
134 ! Input:
135 ! regions = dimensions of all regions.
136 !
137 ! Output: None.
138 !
139 ! Notes: None.
140 !
141 ! ******************************************************************************
142 
143 SUBROUTINE rflo_readpatchaerocoeffs( regions )
144 
146 
147  IMPLICIT NONE
148 
149 #include "Indexing.h"
150 
151 ! ... parameters
152  TYPE(t_region), POINTER :: regions(:)
153 
154 ! ... loop variables
155  INTEGER :: ireg, ipatch, ic
156 
157 ! ... local variables
158  CHARACTER(2*CHRLEN+17) :: fname
159  CHARACTER(CHRLEN) :: msg
160 
161 #ifdef MPI
162  INTEGER :: status(mpi_status_size)
163 #endif
164  INTEGER :: ilev, flowmodel, ifile, iregfile, ipatchfile, n1file, n2file, ioff
165  INTEGER :: n1, n2, n, ncoeffs, tag, ndimc, ijbeg, ijend, bctype, errorflag
166  INTEGER, ALLOCATABLE :: ivar(:,:)
167 
168  REAL(RFREAL), ALLOCATABLE :: rvar(:,:), acfile(:,:)
169 
170  TYPE(t_patch), POINTER :: patch
171  TYPE(t_global), POINTER :: global
172 
173 !******************************************************************************
174 
175  global => regions(1)%global
176 
177  CALL registerfunction( global,&
178  'RFLO_ReadPatchAeroCoeffs',&
179  'RFLO_ModPatchAeroCoeffs.F90' )
180 
181  IF ( global%myProcid == masterproc .AND. &
182  global%verbLevel > verbose_none ) THEN
183  WRITE(stdout,'(A,1X,A)') solver_name, &
184  'Entering RFLO_ReadPatchAeroCoeffs...'
185  END IF ! global%verbLevel
186 
187 ! allocate fixed-size temporary data arrays -----------------------------------
188 
189  ALLOCATE( ivar(4,1),stat=errorflag )
190  ALLOCATE( rvar(1,1),stat=errorflag )
191  global%error = errorflag
192  IF (global%error /= 0) CALL errorstop( global,&
193  err_allocate,&
194  __line__ )
195 
196  ifile = if_patch_coef
197 
198 ! open solution file (only master proc.) --------------------------------------
199 
200  IF (global%myProcid == masterproc) THEN
201 
202 ! - unsteady flow
203 
204  IF (global%flowType == flow_unsteady) THEN
205  IF (global%solutFormat == format_ascii) THEN
206  WRITE(fname,'(A,1PE11.5)') trim(global%inDir)//trim(global%casename)//'.pcoa_', &
207  global%timeStamp
208  OPEN(ifile,file=fname,form='formatted',status='old',iostat=errorflag)
209  ELSE IF (global%solutFormat == format_binary) THEN
210  WRITE(fname,'(A,1PE11.5)') trim(global%inDir)//trim(global%casename)//'.pcob_', &
211  global%timeStamp
212  OPEN(ifile,file=fname,form='unformatted',status='old',iostat=errorflag)
213  ELSE
214  CALL errorstop( global,&
215  err_unknown_format,&
216  __line__ )
217  ENDIF
218 
219 ! - steady flow
220 
221  ELSE
222  IF (global%solutFormat == format_ascii) THEN
223  WRITE(fname,'(A,I6.6)') trim(global%inDir)//trim(global%casename)//'.pcoa_', &
224  global%currentIter
225  OPEN(ifile,file=fname,form='formatted',status='old',iostat=errorflag)
226  ELSE IF (global%solutFormat == format_binary) THEN
227  WRITE(fname,'(A,I6.6)') trim(global%inDir)//trim(global%casename)//'.pcob_', &
228  global%currentIter
229  OPEN(ifile,file=fname,form='unformatted',status='old',iostat=errorflag)
230  ELSE
231  CALL errorstop( global,&
232  err_unknown_format,&
233  __line__ )
234  ENDIF
235  ENDIF
236 
237  global%error = errorflag
238  IF (global%error /= 0) &
239  CALL errorstop( global,&
240  err_file_open,&
241  __line__,&
242  'File: '//trim(fname) )
243 
244  ENDIF ! MASTERPROC
245 
246 ! read, broadcast and check time ----------------------------------------------
247 
248  IF (global%myProcid == masterproc) THEN
249  CALL rflo_readdatafilereal( global,ifile,global%solutFormat,1,1,rvar )
250  ENDIF
251 
252 #ifdef MPI
253  CALL mpi_bcast( rvar,1,mpi_rfreal,masterproc,global%mpiComm,global%mpierr )
254  IF (global%mpierr /=0 ) CALL errorstop( global,&
255  err_mpi_trouble,&
256  __line__ )
257 #endif
258 
259  IF (global%flowType==flow_unsteady .AND. global%currentTime>0._rfreal) THEN
260  IF (global%currentTime /= rvar(1,1)) THEN
261  WRITE(msg,1000) rvar(1,1),global%currentTime
262  CALL errorstop( global,err_time_solution,&
263  __line__,&
264  msg//' File: '//trim(fname) )
265  ENDIF
266  ENDIF
267 
268 ! read solution data ----------------------------------------------------------
269 
270  DO ireg=1,global%nRegions
271  ilev = regions(ireg)%currLevel
272  flowmodel = regions(ireg)%mixtInput%flowModel
273 
274  DO ipatch=1,regions(ireg)%nPatches
275  patch => regions(ireg)%levels(ilev)%patches(ipatch)
276  bctype = patch%bcType
277 
278  IF ((bctype < bc_regionconf .OR. bctype > bc_regionconf+bc_range) .AND.&
279  (bctype < bc_regionint .OR. bctype > bc_regionint +bc_range) .AND.&
280  (bctype < bc_regnonconf .OR. bctype > bc_regnonconf+bc_range)) THEN
281 
282 ! ----- get dimensions and pointers
283 
284  n1 = abs(patch%l1end-patch%l1beg)
285  n2 = abs(patch%l2end-patch%l2beg)
286  ioff = n1 + 1
287  ijbeg = indij( 0, 0,ioff)
288  ijend = indij(n1,n2,ioff)
289 
290  IF (flowmodel==flow_euler) ncoeffs = 1
291  IF (flowmodel==flow_navst) ncoeffs = 5
292  ndimc = ijend - ijbeg + 1
293 
294  tag = regions(ireg)%localNumber + mpi_patchoff*ipatch
295 
296 ! ----- read region and patch number, and dimensions (only master)
297 
298  IF (global%myProcid == masterproc) THEN
299  CALL rflo_readdatafileint( global,ifile,global%solutFormat,4,1,ivar )
300  iregfile = ivar(1,1)
301  ipatchfile = ivar(2,1)
302  n1file = ivar(3,1)
303  n2file = ivar(4,1)
304  IF (iregfile /= ireg) &
305  CALL errorstop( global,err_region_number,&
306  __line__,&
307  'File: '//trim(fname) )
308  IF (ipatchfile /= ipatch) &
309  CALL errorstop( global,err_patch_number,&
310  __line__, &
311  'File: '//trim(fname) )
312  IF (n1file /= n1 .OR. n2file /= n2) THEN
313  WRITE(msg,1000) ireg,ipatch, n1, n2
314  CALL errorstop( global,err_patch_dimens,&
315  __line__,&
316  msg )
317  ENDIF
318  ENDIF
319 
320 ! ----- master reads & sends data, others receive them
321 
322  IF (global%myProcid == masterproc) THEN
323 
324  ALLOCATE( acfile(ncoeffs,ndimc),stat=errorflag )
325  global%error = errorflag
326  IF (global%error /= 0) CALL errorstop( global,err_allocate,&
327  __line__ )
328 
329  CALL rflo_readdatafilereal( global,ifile,global%solutFormat, &
330  ncoeffs,ndimc,acfile )
331 
332 #ifdef MPI
333  IF (regions(ireg)%procid /= masterproc) THEN
334  CALL mpi_send( acfile,ncoeffs*ndimc,mpi_rfreal, &
335  regions(ireg)%procid,tag, &
336  global%mpiComm,global%mpierr )
337  IF (global%mpierr /=0 ) CALL errorstop( global,err_mpi_trouble,&
338  __line__ )
339  ENDIF
340 #endif
341  ELSE ! not the master
342 
343  IF (regions(ireg)%procid == global%myProcid) THEN
344  ALLOCATE( acfile(ncoeffs,ndimc),stat=errorflag )
345  global%error = errorflag
346  IF (global%error /= 0) CALL errorstop( global,err_allocate,&
347  __line__ )
348 
349 #ifdef MPI
350  CALL mpi_recv( acfile,ncoeffs*ndimc,mpi_rfreal,masterproc,tag, &
351  global%mpiComm,status,global%mpierr )
352  IF (global%mpierr /=0 ) CALL errorstop( global,err_mpi_trouble,&
353  __line__ )
354 #endif
355  ENDIF ! my processor
356  ENDIF ! master or not
357 
358 ! ----- copy solution into data structure
359 
360  IF (regions(ireg)%procid == global%myProcid) THEN
361  IF (flowmodel == flow_euler) THEN
362  n = 0
363  DO ic = ijbeg,ijend
364  n = n + 1
365  patch%cp(ic) = acfile(1,n)
366  ENDDO
367  ELSEIF (flowmodel == flow_navst) THEN
368  n = 0
369  DO ic = ijbeg,ijend
370  n = n + 1
371  patch%cp( ic) = acfile(1,n)
372  patch%cf(xcoord,ic) = acfile(2,n)
373  patch%cf(ycoord,ic) = acfile(3,n)
374  patch%cf(zcoord,ic) = acfile(4,n)
375  patch%ch( ic) = acfile(5,n)
376  ENDDO
377  ENDIF
378  ENDIF
379 
380  IF (ALLOCATED(acfile)) THEN
381  DEALLOCATE( acfile,stat=errorflag )
382  global%error = errorflag
383  IF (global%error /= 0) CALL errorstop( global,err_deallocate,&
384  __line__ )
385  ENDIF
386 
387  ENDIF ! bcType
388  ENDDO ! iPatch
389  ENDDO ! iReg
390 
391 ! finalize --------------------------------------------------------------------
392 
393  IF (global%myProcid == masterproc) THEN
394  CLOSE(ifile,iostat=errorflag)
395  global%error = errorflag
396  IF (global%error /= 0) &
397  CALL errorstop( global,err_file_close,&
398  __line__,&
399  'File: '//trim(fname) )
400  ENDIF
401 
402  IF ( global%myProcid == masterproc .AND. &
403  global%verbLevel > verbose_none ) THEN
404  WRITE(stdout,'(A,1X,A)') solver_name, &
405  'Leaving RFLO_ReadPatchAeroCoeffs.'
406  END IF ! global%verbLevel
407 
408  CALL deregisterfunction( global )
409 
410 1000 FORMAT('Region ',i5,', iPatch= ',i5,', n1= ',i5,', n2= ',i5,'.')
411 
412 END SUBROUTINE rflo_readpatchaerocoeffs
413 
414 
415 
416 
417 ! *******************************************************************************
418 !
419 ! Purpose: Write patch coefficients.
420 !
421 ! Description: the following solution formats are supported:
422 ! - RocfloMP ASCII
423 ! - RocfloMP binary.
424 !
425 ! Input:
426 ! regions = dimensions of all regions.
427 !
428 ! Output: None.
429 !
430 ! Notes: None.
431 !
432 ! ******************************************************************************
433 
434 SUBROUTINE rflo_writepatchaerocoeffs( regions )
435 
437 
438  IMPLICIT NONE
439 
440 #include "Indexing.h"
441 
442 ! ... parameters
443  TYPE(t_region), POINTER :: regions(:)
444 
445 ! ... loop variables
446  INTEGER :: ireg, ipatch, ic
447 
448 ! ... local variables
449  CHARACTER(2*CHRLEN+17) :: fname
450  CHARACTER(CHRLEN) :: msg
451 
452 #ifdef MPI
453  INTEGER :: status(mpi_status_size)
454 #endif
455  INTEGER :: ilev, flowmodel, ifile, iregfile, ipatchfile, n1file, n2file, ioff
456  INTEGER :: n1, n2, n, ncoeffs, tag, ndimc, ijbeg, ijend, bctype, errorflag
457  INTEGER, ALLOCATABLE :: ivar(:,:)
458 
459  REAL(RFREAL), ALLOCATABLE :: rvar(:,:), acfile(:,:)
460 
461  TYPE(t_patch), POINTER :: patch
462  TYPE(t_global), POINTER :: global
463 
464 !******************************************************************************
465 
466  global => regions(1)%global
467 
468  CALL registerfunction( global,'RFLO_WritePatchAeroCoeffs',&
469  'RFLO_ModPatchAeroCoeffs.F90' )
470 
471  IF ( global%myProcid == masterproc .AND. &
472  global%verbLevel > verbose_none ) THEN
473  WRITE(stdout,'(A,1X,A)') solver_name, &
474  'Entering RFLO_WritePatchAeroCoeffs...'
475  END IF ! global%verbLevel
476 
477 ! allocate fixed-size temporary data arrays -----------------------------------
478 
479  ALLOCATE( ivar(4,1),stat=errorflag )
480  ALLOCATE( rvar(1,1),stat=errorflag )
481  global%error = errorflag
482  IF (global%error /= 0) CALL errorstop( global,err_allocate,&
483  __line__ )
484 
485  ifile = if_patch_coef
486 
487 ! open solution file (only master proc.) --------------------------------------
488 
489  IF (global%myProcid == masterproc) THEN
490 
491 ! - unsteady flow
492 
493  IF (global%flowType == flow_unsteady) THEN
494  IF (global%solutFormat == format_ascii) THEN
495  WRITE(fname,'(A,1PE11.5)') trim(global%inDir)//trim(global%casename)//'.pcoa_', &
496  global%currentTime
497  OPEN(ifile,file=fname,form='formatted',status='unknown', &
498  iostat=errorflag)
499  ELSE IF (global%solutFormat == format_binary) THEN
500  WRITE(fname,'(A,1PE11.5)') trim(global%inDir)//trim(global%casename)//'.pcob_', &
501  global%currentTime
502  OPEN(ifile,file=fname,form='unformatted',status='unknown', &
503  iostat=errorflag)
504  ELSE
505  CALL errorstop( global,err_unknown_format,&
506  __line__ )
507  ENDIF
508  rvar(1,1) = global%currentTime
509 
510 ! - steady flow
511 
512  ELSE
513  IF (global%solutFormat == format_ascii) THEN
514  WRITE(fname,'(A,I6.6)') trim(global%inDir)//trim(global%casename)//'.pcoa_', &
515  global%currentIter
516  OPEN(ifile,file=fname,form='formatted',status='unknown', &
517  iostat=errorflag)
518  ELSE IF (global%solutFormat == format_binary) THEN
519  WRITE(fname,'(A,I6.6)') trim(global%inDir)//trim(global%casename)//'.pcob_', &
520  global%currentIter
521  OPEN(ifile,file=fname,form='unformatted',status='unknown', &
522  iostat=errorflag)
523  ELSE
524  CALL errorstop( global,err_unknown_format,&
525  __line__ )
526  ENDIF
527  rvar(1,1) = global%resInit
528  ENDIF
529 
530  global%error = errorflag
531  IF (global%error /= 0) &
532  CALL errorstop( global,err_file_open,&
533  __line__,&
534  'File: '//trim(fname) )
535 
536  ENDIF ! MASTERPROC
537 
538 ! read, broadcast and check time ----------------------------------------------
539 
540  IF (global%myProcid == masterproc) THEN
541  CALL rflo_writedatafilereal( global,ifile,global%solutFormat,1,1,rvar )
542  ENDIF
543 
544 ! write solution data ---------------------------------------------------------
545 
546  DO ireg=1,global%nRegions
547  ilev = regions(ireg)%currLevel
548  flowmodel = regions(ireg)%mixtInput%flowModel
549 
550  DO ipatch=1,regions(ireg)%nPatches
551  patch => regions(ireg)%levels(ilev)%patches(ipatch)
552  bctype = patch%bcType
553 
554  IF ((bctype < bc_regionconf .OR. bctype > bc_regionconf+bc_range) .AND.&
555  (bctype < bc_regionint .OR. bctype > bc_regionint +bc_range) .AND.&
556  (bctype < bc_regnonconf .OR. bctype > bc_regnonconf+bc_range)) THEN
557 
558  IF (regions(ireg)%procid==global%myProcid .OR. &
559  global%myProcid==masterproc) THEN
560 
561 ! ------- get dimensions and pointers
562 
563  n1 = abs(patch%l1end-patch%l1beg)
564  n2 = abs(patch%l2end-patch%l2beg)
565  ioff = n1 + 1
566  ijbeg = indij( 0, 0,ioff)
567  ijend = indij(n1,n2,ioff)
568 
569  IF (flowmodel==flow_euler) ncoeffs = 1
570  IF (flowmodel==flow_navst) ncoeffs = 5
571  ndimc = ijend - ijbeg + 1
572 
573  tag = regions(ireg)%localNumber + mpi_patchoff*ipatch
574 
575 ! ------- allocate temporary array
576 
577  ALLOCATE( acfile(ncoeffs,ndimc),stat=errorflag )
578  global%error = errorflag
579  IF (global%error /= 0) CALL errorstop( global,err_allocate,&
580  __line__ )
581 
582  ENDIF ! region%procid
583 
584 ! ----- copy solution into data structure
585 
586  IF (regions(ireg)%procid == global%myProcid) THEN
587  IF (flowmodel == flow_euler) THEN
588  n = 0
589  DO ic = ijbeg,ijend
590  n = n + 1
591  acfile(1,n) = patch%cp(ic)
592  ENDDO
593  ELSEIF (flowmodel == flow_navst) THEN
594  n = 0
595  DO ic = ijbeg,ijend
596  n = n + 1
597  acfile(1,n) = patch%cp( ic)
598  acfile(2,n) = patch%cf(xcoord,ic)
599  acfile(3,n) = patch%cf(ycoord,ic)
600  acfile(4,n) = patch%cf(zcoord,ic)
601  acfile(5,n) = patch%ch( ic)
602  ENDDO
603  ENDIF
604 
605  ENDIF ! region%procid
606 
607 ! ----- write region and patch number, and dimensions (only master)
608 
609  IF (global%myProcid == masterproc) THEN
610  ivar(1,1) = ireg
611  ivar(2,1) = ipatch
612  ivar(3,1) = n1
613  ivar(4,1) = n2
614  CALL rflo_writedatafileint( global,ifile,global%solutFormat,4,1,ivar )
615  ENDIF
616 
617 ! ----- master receives and writes data, others send them
618 
619  IF (global%myProcid == masterproc) THEN
620 #ifdef MPI
621  IF (regions(ireg)%procid /= masterproc) THEN
622  CALL mpi_recv( acfile,ncoeffs*ndimc,mpi_rfreal, &
623  regions(ireg)%procid,tag, &
624  global%mpiComm,status,global%mpierr )
625  IF (global%mpierr /=0 ) CALL errorstop( global,err_mpi_trouble,&
626  __line__ )
627  ENDIF
628 #endif
629  CALL rflo_writedatafilereal( global,ifile,global%solutFormat, &
630  ncoeffs,ndimc,acfile )
631  ELSE ! not the master
632 
633  IF (regions(ireg)%procid == global%myProcid) THEN
634 #ifdef MPI
635  CALL mpi_send( acfile,ncoeffs*ndimc,mpi_rfreal,masterproc,tag, &
636  global%mpiComm,global%mpierr )
637  IF (global%mpierr /=0 ) CALL errorstop( global,err_mpi_trouble,&
638  __line__ )
639 #endif
640  ENDIF ! my processor
641  ENDIF ! master or not
642 
643  IF (ALLOCATED(acfile)) THEN
644  DEALLOCATE( acfile,stat=errorflag )
645  global%error = errorflag
646  IF (global%error /= 0) CALL errorstop( global,err_deallocate,&
647  __line__ )
648  ENDIF
649 
650  ENDIF ! bcType
651  ENDDO ! iPatch
652  ENDDO ! iReg
653 
654 ! finalize --------------------------------------------------------------------
655 
656  IF (global%myProcid == masterproc) THEN
657  CLOSE(ifile,iostat=errorflag)
658  global%error = errorflag
659  IF (global%error /= 0) &
660  CALL errorstop( global,err_file_close,&
661  __line__,&
662  'File: '//trim(fname) )
663  ENDIF
664 
665  IF ( global%myProcid == masterproc .AND. &
666  global%verbLevel > verbose_none ) THEN
667  WRITE(stdout,'(A,1X,A)') solver_name, &
668  'Leaving RFLO_WritePatchAeroCoeffs.'
669  END IF ! global%verbLevel
670 
671  CALL deregisterfunction( global )
672 
673 1000 FORMAT('Region ',i5,', iPatch= ',i5,', n1= ',i5,', n2= ',i5,'.')
674 
675 END SUBROUTINE rflo_writepatchaerocoeffs
676 
677 
678 
679 ! *******************************************************************************
680 !
681 ! Purpose: Read patch coefficients regionwise.
682 !
683 ! Description: the following solution formats are supported:
684 ! - RocfloMP ASCII
685 ! - RocfloMP binary.
686 !
687 ! Input:
688 ! regions = dimensions of all regions.
689 !
690 ! Output: None.
691 !
692 ! Notes: None.
693 !
694 ! ******************************************************************************
695 
696 SUBROUTINE rflo_readpatchaerocoeffsreg( iReg,regions )
697 
699 
700  IMPLICIT NONE
701 
702 #include "Indexing.h"
703 
704 ! ... parameters
705  INTEGER :: ireg
706  TYPE(t_region), POINTER :: regions(:)
707 
708 ! ... loop variables
709  INTEGER :: ipatch, ic
710 
711 ! ... local variables
712  CHARACTER(2*CHRLEN+17) :: fname
713  CHARACTER(CHRLEN) :: msg
714 
715  INTEGER :: ilev, flowmodel, ifile, iregfile, ipatchfile, n1file, n2file, ioff
716  INTEGER :: n1, n2, n, ncoeffs, ndimc, ijbeg, ijend, bctype, errorflag
717  INTEGER, ALLOCATABLE :: ivar(:,:)
718 
719  REAL(RFREAL), ALLOCATABLE :: rvar(:,:), acfile(:,:)
720 
721  TYPE(t_patch), POINTER :: patch
722  TYPE(t_global), POINTER :: global
723 
724 !******************************************************************************
725 
726  global => regions(ireg)%global
727 
728  CALL registerfunction( global,'RFLO_ReadPatchAeroCoeffsReg',&
729  'RFLO_ModPatchAeroCoeffs.F90' )
730 
731  IF ( global%myProcid == masterproc .AND. &
732  global%verbLevel > verbose_none ) THEN
733  WRITE(stdout,'(A,1X,A)') solver_name, &
734  'Entering RFLO_ReadPatchAeroCoeffsReg...'
735  END IF ! global%verbLevel
736 
737 ! allocate fixed-size temporary data arrays -----------------------------------
738 
739  ALLOCATE( ivar(4,1),stat=errorflag )
740  ALLOCATE( rvar(1,1),stat=errorflag )
741  global%error = errorflag
742  IF (global%error /= 0) CALL errorstop( global,err_allocate,&
743  __line__ )
744 
745  ifile = if_patch_coef
746 
747 ! open solution file (only if iReg=1) -----------------------------------------
748 
749  IF (ireg == 1) THEN
750 
751 ! - unsteady flow
752 
753  IF (global%flowType == flow_unsteady) THEN
754  IF (global%solutFormat == format_ascii) THEN
755  WRITE(fname,'(A,1PE11.5)') trim(global%inDir)//trim(global%casename)//'.pcoa_', &
756  global%timeStamp
757  OPEN(ifile,file=fname,form='formatted',status='old',iostat=errorflag)
758  ELSE IF (global%solutFormat == format_binary) THEN
759  WRITE(fname,'(A,1PE11.5)') trim(global%inDir)//trim(global%casename)//'.pcob_', &
760  global%timeStamp
761  OPEN(ifile,file=fname,form='unformatted',status='old',iostat=errorflag)
762  ELSE
763  CALL errorstop( global,err_unknown_format,&
764  __line__ )
765  ENDIF
766 
767 ! - steady flow
768 
769  ELSE
770  IF (global%solutFormat == format_ascii) THEN
771  WRITE(fname,'(A,I6.6)') trim(global%inDir)//trim(global%casename)//'.pcoa_', &
772  global%currentIter
773  OPEN(ifile,file=fname,form='formatted',status='old',iostat=errorflag)
774  ELSE IF (global%solutFormat == format_binary) THEN
775  WRITE(fname,'(A,I6.6)') trim(global%inDir)//trim(global%casename)//'.pcob_', &
776  global%currentIter
777  OPEN(ifile,file=fname,form='unformatted',status='old',iostat=errorflag)
778  ELSE
779  CALL errorstop( global,err_unknown_format,&
780  __line__ )
781  ENDIF
782  ENDIF
783 
784  global%error = errorflag
785  IF (global%error /= 0) &
786  CALL errorstop( global,err_file_open,&
787  __line__,&
788  'File: '//trim(fname) )
789 
790 ! - read and check time -------------------------------------------------------
791 
792  IF (global%myProcid == masterproc) THEN
793  CALL rflo_readdatafilereal( global,ifile,global%solutFormat,1,1,rvar )
794  ENDIF
795 
796  IF (global%flowType==flow_unsteady .AND. global%currentTime>0._rfreal) THEN
797  IF (global%currentTime /= rvar(1,1)) THEN
798  WRITE(msg,1000) rvar(1,1),global%currentTime
799  CALL errorstop( global,err_time_solution,&
800  __line__,&
801  msg//' File: '//trim(fname) )
802  ENDIF
803  ENDIF
804 
805  ENDIF ! 1st region
806 
807 ! read solution data ----------------------------------------------------------
808 
809  ilev = regions(ireg)%currLevel
810  flowmodel = regions(ireg)%mixtInput%flowModel
811 
812  DO ipatch=1,regions(ireg)%nPatches
813  patch => regions(ireg)%levels(ilev)%patches(ipatch)
814  bctype = patch%bcType
815 
816 
817  IF ((bctype < bc_regionconf .OR. bctype > bc_regionconf+bc_range) .AND.&
818  (bctype < bc_regionint .OR. bctype > bc_regionint +bc_range) .AND.&
819  (bctype < bc_regnonconf .OR. bctype > bc_regnonconf+bc_range)) THEN
820 
821 ! --- get dimensions and pointers
822 
823  n1 = abs(patch%l1end-patch%l1beg)
824  n2 = abs(patch%l2end-patch%l2beg)
825  ioff = n1 + 1
826  ijbeg = indij( 0, 0,ioff)
827  ijend = indij(n1,n2,ioff)
828 
829  IF (flowmodel==flow_euler) ncoeffs = 1
830  IF (flowmodel==flow_navst) ncoeffs = 5
831  ndimc = ijend - ijbeg + 1
832 
833 ! --- read region and patch number, and dimensions (only master)
834 
835  CALL rflo_readdatafileint( global,ifile,global%solutFormat,4,1,ivar )
836  iregfile = ivar(1,1)
837  ipatchfile = ivar(2,1)
838  n1file = ivar(3,1)
839  n2file = ivar(4,1)
840 
841  IF (iregfile /= ireg) &
842  CALL errorstop( global,err_region_number,&
843  __line__, &
844  'File: '//trim(fname) )
845  IF (ipatchfile /= ipatch) &
846  CALL errorstop( global,err_patch_number,&
847  __line__, &
848  'File: '//trim(fname) )
849  IF (n1file /= n1 .OR. n2file /= n2) THEN
850  WRITE(msg,1000) ireg,ipatch, n1, n2
851  CALL errorstop( global,err_patch_dimens,&
852  __line__,&
853  msg )
854  ENDIF
855 
856 ! --- read data
857 
858  ALLOCATE( acfile(ncoeffs,ndimc),stat=errorflag )
859  global%error = errorflag
860  IF (global%error /= 0) CALL errorstop( global,err_allocate,__line__ )
861 
862  CALL rflo_readdatafilereal( global,ifile,global%solutFormat, &
863  ncoeffs,ndimc,acfile )
864 
865 ! --- copy solution into data structure
866 
867  IF (flowmodel == flow_euler) THEN
868  n = 0
869  DO ic = ijbeg,ijend
870  n = n + 1
871  patch%cp(ic) = acfile(1,n)
872  ENDDO
873  ELSEIF (flowmodel == flow_navst) THEN
874  n = 0
875  DO ic = ijbeg,ijend
876  n = n + 1
877  patch%cp( ic) = acfile(1,n)
878  patch%cf(xcoord,ic) = acfile(2,n)
879  patch%cf(ycoord,ic) = acfile(3,n)
880  patch%cf(zcoord,ic) = acfile(4,n)
881  patch%ch( ic) = acfile(5,n)
882  ENDDO
883  ENDIF
884 
885  IF (ALLOCATED(acfile)) THEN
886  DEALLOCATE( acfile,stat=errorflag )
887  global%error = errorflag
888  IF (global%error /= 0) CALL errorstop( global,err_deallocate,__line__ )
889  ENDIF
890 
891  ENDIF ! bcType
892  ENDDO ! iPatch
893 
894 ! finalize --------------------------------------------------------------------
895 
896  IF (ireg == global%nRegions) THEN
897  CLOSE(ifile,iostat=errorflag)
898  global%error = errorflag
899  IF (global%error /= 0) &
900  CALL errorstop( global,err_file_close,__line__,'File: '//trim(fname) )
901  ENDIF
902 
903  IF ( global%myProcid == masterproc .AND. &
904  global%verbLevel > verbose_none ) THEN
905  WRITE(stdout,'(A,1X,A)') solver_name, &
906  'Leaving RFLO_ReadPatchAeroCoeffsReg.'
907  END IF ! global%verbLevel
908 
909  CALL deregisterfunction( global )
910 
911 1000 FORMAT('Region ',i5,', iPatch= ',i5,', n1= ',i5,', n2= ',i5,'.')
912 
913 END SUBROUTINE rflo_readpatchaerocoeffsreg
914 
915 
916 
917 ! ******************************************************************************
918 ! End
919 ! ******************************************************************************
920 
921 END MODULE rflo_modpatchaerocoeffs
922 
923 ! ******************************************************************************
924 !
925 ! RCS Revision history:
926 !
927 ! $Log: RFLO_ModPatchAeroCoeffs.F90,v $
928 ! Revision 1.5 2008/12/06 08:44:17 mtcampbe
929 ! Updated license.
930 !
931 ! Revision 1.4 2008/11/19 22:17:28 mtcampbe
932 ! Added Illinois Open Source License/Copyright
933 !
934 ! Revision 1.3 2006/03/25 04:33:49 wasistho
935 ! incorrect placing of status in mpi send/rcv of write routine
936 !
937 ! Revision 1.2 2006/03/24 04:56:18 wasistho
938 ! initialized patch force moments coeffs
939 !
940 ! Revision 1.1 2006/03/22 03:06:50 wasistho
941 ! initial import
942 !
943 !
944 ! ******************************************************************************
945 
946 
947 
948 
949 
950 
951 
952 
953 
954 
subroutine rflo_writedatafileint(global, fileId, form, nDim1, nDim2, ivar)
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
int status() const
Obtain the status of the attribute.
Definition: Attribute.h:240
**********************************************************************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 ic
subroutine rflo_readdatafileint(global, fileId, form, nDim1, nDim2, ivar)
subroutine, public rflo_writepatchaerocoeffs(regions)
Definition: patch.h:74
**********************************************************************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
subroutine, public rflo_initpatchaerocoeffs(region, patch)
subroutine, public rflo_readpatchaerocoeffs(regions)
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
subroutine, public rflo_readpatchaerocoeffsreg(iReg, regions)
subroutine rflo_writedatafilereal(global, fileId, form, nDim1, nDim2, var)
subroutine deregisterfunction(global)
Definition: ModError.F90:469
subroutine rflo_readdatafilereal(global, fileId, form, nDim1, nDim2, var)