Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
setup_py.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 MODULE setup_py
24  USE data_py
25 
26 CONTAINS
27 
28 
29 !****************************************************************
30  SUBROUTINE get_time_step_1d(bp,rb,Toa,dt_max)
31  IMPLICIT NONE
32 !---------------------------------------------------------------------
33  TYPE(parameter_structure),POINTER :: bp
34  REAL(DBL), INTENT(IN) :: rb,toa
35  REAL(DBL), INTENT(OUT) :: dt_max
36 !------------------------------------------------------------------------
37 
38  dt_max = bp%delt_max
39 
40 !------------------------------------------------------------------------
41  RETURN
42  END SUBROUTINE get_time_step_1d
43 !***********************************************************************
44 
45 
46 
47 
48 
49 !***************************************************************************
50  SUBROUTINE burn_init_0d(bp, comm, IN_DIR, nx_read,To_read)
51 
52  include 'mpif.h'
53 
54  TYPE(parameter_structure),POINTER :: bp
55  INTEGER, INTENT(IN) :: comm
56  REAL(DBL), INTENT(OUT) :: to_read
57  INTEGER , INTENT(OUT) :: nx_read
58  INTEGER :: ierror, rank
59  CHARACTER(*), INTENT(IN) :: in_dir
60 !----------------------------------------------------------------------------
61 
62  CALL mpi_comm_rank(comm, rank, ierror)
63 
64  ALLOCATE(bp)
65  bp%comm = comm
66 !
67 ! read propellant thermophysical properties
68 !
69  CALL read_properties(bp,in_dir)
70 !
71 ! set return values of this subroutine
72 !
73  nx_read = bp%numx
74  to_read = bp%To
75 !
76 ! grid generation
77 !
78  CALL grid(bp)
79  if(bp%TABUSE == 1) CALL readtable(bp, in_dir)
80 
81 
82  RETURN
83  END SUBROUTINE burn_init_0d
84 !********************************************************
85 
86 !
87 !==============================================================================
88 !
89  SUBROUTINE read_properties(bp,IN_DIR)
90 
91  include 'mpif.h'
92 
93  TYPE(parameter_structure),POINTER :: bp
94  CHARACTER*(*), INTENT(IN) :: in_dir
95  INTEGER :: ir
96  CHARACTER(LEN=90) :: filnam
97  INTEGER :: ioerr,rank,ierror
98 !---------------------------------------------------------------------
99 
100  CALL mpi_comm_rank(bp%comm, rank, ierror)
101 
102  filnam = 'RocburnPYControl.txt'
103  IF (in_dir(len_trim(in_dir):len_trim(in_dir)) == '/') THEN
104  filnam = trim(in_dir) // trim(filnam)
105  ELSE
106  filnam = trim(in_dir) // '/' // trim(filnam)
107  ENDIF
108 
109  filnam = trim(filnam)
110  ir = 10
111 
112 
113  OPEN (unit=ir,file=filnam,status='old',iostat=ioerr)
114  if(ioerr > 0) THEN
115  write(*,*)'LOOKING FOR file ',filnam
116  write(*,*)'FILE NOT FOUND'
117  CALL mpi_abort(bp%comm, 1, ierror)
118  endif
119 
120 
121 
122  READ(ir,*) bp%a_p
123  IF (rank==0) WRITE(*,*) 'ROCBURN: a_p =', bp%a_p
124 
125  READ(ir,*) bp%n_p
126  IF (rank==0) WRITE(*,*) 'ROCBURN: n_p =', bp%n_p
127 
128  READ(ir,*) bp%Pref
129  IF (rank==0) WRITE(*,*) 'ROCBURN: Pref =', bp%Pref
130 
131  READ(ir,*) bp%Ac
132  IF (rank==0) WRITE(*,*) 'ROCBURN: Ac= ',bp%Ac
133 
134  READ(ir,*) bp%eg_ru
135  IF (rank==0) WRITE(*,*) 'ROCBURN: eg_ru= ',bp%eg_ru
136 
137  READ(ir,*) bp%ec_ru
138  IF (rank==0) WRITE(*,*) 'ROCBURN: ec_ru ',bp%ec_ru
139 
140  READ(ir,*) bp%alfac
141  IF (rank==0) WRITE(*,*) 'ROCBURN: alfac= ',bp%alfac
142 
143  READ(ir,*) bp%C
144  IF (rank==0) WRITE(*,*) 'ROCBURN: C= ',bp%C
145 
146  READ(ir,*) bp%lamg
147  IF (rank==0) WRITE(*,*) 'ROCBURN: lamg= ',bp%lamg
148 
149  READ(ir,*) bp%delt
150  IF (rank==0) WRITE(*,*) 'ROCBURN: delt= ',bp%delt
151 
152  READ(ir,*) bp%igrid
153  IF (rank==0) WRITE(*,*) 'ROCBURN: igrid= ',bp%igrid
154 
155  READ(ir,*) bp%numx
156  IF (rank==0) WRITE(*,*) 'ROCBURN: numx= ',bp%numx
157 
158  READ(ir,*) bp%xmax
159  IF (rank==0) WRITE(*,*) 'ROCBURN: xmax= ',bp%xmax
160 
161  READ(ir,*) bp%beta
162  IF (rank==0) WRITE(*,*) 'ROCBURN: beta= ',bp%beta
163 
164  READ(ir,*) bp%Tstar0
165  IF (rank==0) WRITE(*,*) 'ROCBURN: Tf_adiabatic= ', bp%Tstar0
166 
167  READ(ir,*) bp%To
168  IF (rank==0) WRITE(*,*) 'ROCBURN: To= ',bp%To
169 
170  READ(ir,*) bp%Tignition
171  IF (rank==0) WRITE(*,*) 'ROCBURN: Tignition= ',bp%Tignition
172 
173  READ(ir,*) bp%Tsurf
174  IF (rank==0) WRITE(*,*) 'ROCBURN: Initial Temp = ',bp%Tsurf
175 
176  read(ir,*) bp%film_cons
177  IF (rank==0) WRITE(*,*) 'ROCBURN: film_cons= ',bp%film_cons
178 
179  read(ir,*) bp%ixsymm
180  IF (rank==0) WRITE(*,*) 'ROCBURN: ixsymm = ',bp%ixsymm
181 
182  read(ir,*) bp%x_surf_burn
183  IF (rank==0) WRITE(*,*) 'ROCBURN: x_surf_burn = ',bp%x_surf_burn
184 
185  read(ir,*, err = 101,END = 101) bp%P_range(2)
186  IF (rank==0) WRITE(*,*) 'ROCBURN: press_max = ',bp%P_range(2)
187  read(ir,*, err = 101,END = 101) bp%P_range(1)
188  IF (rank==0) WRITE(*,*) 'ROCBURN: press_min = ',bp%P_range(1)
189  if(bp%P_range(2) + bp%P_range(1) < 100.0) goto 101
190 
191  read(ir,*, err = 101,END = 101) bp%rb_range(2)
192  IF (rank==0) WRITE(*,*) 'ROCBURN: rb_max = ',bp%rb_range(2)
193  read(ir,*, err = 101,END = 101) bp%rb_range(1)
194  IF (rank==0) WRITE(*,*) 'ROCBURN: rb_min = ',bp%rb_range(1)
195 
196  read(ir,*, err = 101,END = 101) bp%Tf_range(2)
197  IF (rank==0) WRITE(*,*) 'ROCBURN: Tf_max = ',bp%Tf_range(2)
198  read(ir,*, err = 101,END = 101) bp%Tf_range(1)
199  IF (rank==0) WRITE(*,*) 'ROCBURN: Tf_min = ',bp%Tf_range(1)
200 
201  READ(ir,*, err = 102,END = 102) bp%TABUSE
202  IF (rank==0) WRITE(*,*) 'ROCBURN: TABUSE =', bp%TABUSE
203 
204  READ(ir,*, err = 102,END = 102) bp%TABNAM
205  IF (rank==0) WRITE(*,*) 'ROCBURN: TABNAM =', bp%TABNAM
206 
207  CLOSE(ir)
208 
209  goto 199
210 
211 ! RANGE NOT FOUND
212 101 CONTINUE
213  CLOSE(ir)
214  IF (rank==0) WRITE(*,*) 'MISSING variable RANGES, ...&
215  & probably you are using an OLD input deck'
216  IF (rank==0) WRITE(*,*) 'Hardwiring limits'
217  bp%P_range = (/1.d3,1.d8/)
218  bp%rb_range = (/-1.d-9,1.d2/)
219  bp%Tf_range = (/290.0d0,10000.0d0/)
220  goto 199
221 
222 !NO TABLE
223 102 CONTINUE
224  CLOSE(ir)
225  IF (rank==0) WRITE(*,*) 'MISSING TABNAM TABUSE'
226  bp%TABUSE = 0
227  goto 199
228 
229 
230 199 CONTINUE
231 
232 ! Check input deck
233  IF (rank==0) CALL check_input_range(bp)
234 
235 !--------------------------------------------------------------------------
236  RETURN
237  END SUBROUTINE read_properties
238 !******************************************************
239 
240 !=============================================================================
241 ! S_U_B_R_O_U_T_I_N_E grid
242 ! arguments : c
243 ! c
244 ! gridtype : = 1 expoential grid c
245 ! = 2 boundary layer grid c
246 ! numx : maximum number of grid points c
247 ! beta : stretch parameter c
248 ! xmax : the maximum dimension in x-coordinate c
249 ! x : the x-coordinate array c
250 ! z : the z-coordinate arary c
251 ! zx : the first derivative of z c
252 ! zxx : the second derivative of z c
253 ! delz : the z spacing c
254 ! c
255 !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
256 
257  SUBROUTINE grid(bp)
258 
259  IMPLICIT NONE
260  include 'mpif.h'
261 !----------------------------------------------------------------------
262  TYPE(parameter_structure),POINTER :: bp
263  INTEGER :: gridtype, numx
264  REAL(DBL) :: bpm,bp1,bm1,czx
265  REAL(DBL) :: czxx,term,term2
266  REAL(DBL) :: beta,xmax
267  REAL(DBL), POINTER :: x(:), z(:), zx(:), zxx(:)
268  INTEGER :: i,rank,ierror
269 !----------------------------------------------------------------------
270 
271  CALL mpi_comm_rank(bp%comm, rank, ierror)
272 
273  gridtype = bp%igrid
274  numx = bp%numx
275  beta = bp%beta
276  xmax = bp%xmax
277  bp%delz = one/dble(numx-1)
278 
279 
280  ALLOCATE(bp%x(numx))
281  ALLOCATE(bp%z(numx))
282  ALLOCATE(bp%zx(numx))
283  ALLOCATE(bp%zxx(numx))
284 
285 
286 !
287 ! This is not very fancy but will save time. this sub is called one per run
288 !
289  x => bp%x
290  z => bp%z
291  zx => bp%zx
292  zxx => bp%zxx
293 
294  IF(rank ==0) THEN
295  print *,' ROCBURN: delz=',bp%delz
296  print *,' ROCBURN: nxmax=',numx
297  END IF
298 
299  IF (gridtype.eq.1) THEN
300 !
301 ! exponential grid
302 !
303  DO i=1,numx
304  z(i) = dble(i-1)*bp%delz
305  x(i) = log(one-z(i))/beta
306  IF (i.eq.numx) THEN
307  x(i) = -10.
308  END IF
309  zx(i) = -beta*exp(beta*x(i))
310  zxx(i) = -beta**two*exp(beta*x(i))
311  ENDDO
312 
313  ELSE
314 !
315 ! Anderson, Tanehill and Pletcher boundary layer grid
316 !
317 
318  bp1=beta+1.0
319  bm1=beta-1.0
320  bpm=bp1/bm1
321  czx=2.0*beta/log(bpm)/xmax
322  czxx=-2.0/xmax*czx
323  DO i=1,numx
324  z(i)=dble(i-1)*bp%delz
325  term=bpm**(one-z(i))
326  x(i)=xmax*(bp1-bm1*term)/(term+one)
327  term2=beta**2-(one-x(i)/xmax)**2
328  zx(i)=czx/term2
329  zxx(i)= czxx*(one-x(i)/xmax)/term2**2
330  ENDDO
331 
332  END IF
333 
334 ! EVALUATE MAXIMUM DT for time integration
335 
336  bp%delt_max = half*bp%delz*bp%delz/maxval(abs(zx))**2/bp%alfac
337  bp%delz2inv = half/bp%delz
338  bp%delzsqinv = one / (bp%delz*bp%delz)
339  bp%dx1 = bp%delz/zx(1)
340 
341  IF(rank == 0) THEN
342  WRITE (*,*)
343  WRITE (*,*)' ROCBURN: Smallest delta x = ',x(1)-x(2)
344  WRITE (*,*)' ROCBURN: Largest delta x = ',x(numx-1)-x(numx)
345  WRITE (*,*)' ROCBURN: MAXIMUM DELTA t = ',bp%delt_max
346  WRITE (*,*)
347  END IF
348 
349  nullify(x,z,zx,zxx)
350 !--------------------------------------------------
351  RETURN
352  END SUBROUTINE grid
353 !******************************************************
354 
355 
356 !******************************************************
357  SUBROUTINE readtable(bp,IN_DIR)
358 
359  IMPLICIT NONE
360  include 'mpif.h'
361 !----------------------------------------------------------------------
362  TYPE(parameter_structure),POINTER :: bp
363  REAL(DBL) :: ts,pread,g,rb,fx2,alfaeff
364  REAL(DBL) :: tss,rss,alptab
365  REAL(DBL) :: out0,out1,out_1,err
366  REAL(DBL),POINTER :: vtmp(:)
367  INTEGER :: i,j,l,inttmp,n1,n2,n3,n4,count, ierror, rank,ioerr
368  CHARACTER*(*), INTENT(IN) :: in_dir
369  CHARACTER(LEN=90) :: filnam
370 !----------------------------------------------------------------------
371 
372  CALL mpi_comm_rank(bp%comm, rank, ierror)
373 
374  allocate(bp%TABLE)
375 
376  filnam = trim(bp%TABNAM)
377  IF (in_dir(len_trim(in_dir):len_trim(in_dir)) == '/') THEN
378  filnam = trim(in_dir) // trim(filnam)
379  ELSE
380  filnam = trim(in_dir) // '/' // trim(filnam)
381  ENDIF
382 
383 !--open
384  open(32,file=filnam,status='old',iostat=ioerr)
385  if(ioerr > 0) THEN
386  write(*,*)'LOOKING FOR file ',filnam
387  write(*,*)'FILE NOT FOUND'
388  write(*,*)'Use table flag:: ',bp%TABUSE
389  CALL mpi_abort(bp%comm, 1, ierror)
390  endif
391 
392 
393  read(32,*)bp%TABLE%nx_table,bp%TABLE%ny_table,bp%TABLE%nfield,inttmp
394  n1 = bp%TABLE%nx_table; n2 = bp%TABLE%ny_table;
395  n3 = max(n1,n2); n4 = bp%TABLE%nfield
396 
397 !----->allocation table fields
398  allocate(bp%TABLE%tsurf00 (n1))
399  allocate(bp%TABLE%press00 (n2))
400  allocate(bp%TABLE%heatflux00 (n1,n2))
401  allocate(bp%TABLE%rb00 (n1,n2))
402  allocate(bp%TABLE%fxsq00 (n1,n2))
403  allocate(bp%TABLE%Tgas00 (n1,n2))
404  allocate(bp%TABLE%Tstd00 (n2))
405  allocate(bp%TABLE%rstd00 (n2))
406  allocate(bp%TABLE%alph00 (n1,n2))
407 !----->allocation work fields
408  allocate(bp%TABLE%wrk1 (n3))
409  allocate(bp%TABLE%wrk2 (n3))
410  allocate(bp%TABLE%wrk3 (n3))
411  allocate(bp%TABLE%wrk4 (n3))
412  allocate(bp%TABLE%wrk5 (n3))
413  allocate(bp%TABLE%wrk6 (n3))
414  allocate(bp%TABLE%wrk7 (n3))
415  allocate(bp%TABLE%wrk8 (n3))
416  allocate(bp%TABLE%wrk9 (n3))
417  allocate(bp%TABLE%wrk10 (n3))
418 
419  allocate(vtmp(n4))
420 
421 ! NOTE reacquire a value for alpha from the table
422 
423  read(32,*)alptab,bp%TABLE%chi
424 
425  if(rank == 0 .and. abs(alptab-bp%alfac) > 1d-10 ) &
426  write(*,*) 'WARNING changing ALPHA',bp%alfac,alptab
427 
428  bp%alfac = alptab
429 
430  do j=1,bp%TABLE%ny_table
431  do i=1,bp%TABLE%nx_table
432  read(32,*) (vtmp(l),l=1,n4)
433 
434  bp%TABLE%tsurf00(i) = vtmp(1)
435  bp%TABLE%press00(j) = vtmp(2)
436  bp%TABLE%heatflux00(i,j) = vtmp(3)
437  bp%TABLE%rb00(i,j) = vtmp(4)
438  bp%TABLE%fxsq00(i,j) = vtmp(5)
439  alfaeff = bp%alfac*( one + bp%TABLE%chi + bp%TABLE%fxsq00(i,j) )
440  bp%TABLE%alph00(i,j) = alfaeff
441  if(n4 > 5) then
442  bp%TABLE%Tgas00(i,j) = vtmp(6)
443  else
444  bp%TABLE%Tgas00(i,j) = bp%Tstar0 - bp%To + bp%TABLE&
445  %tsurf00(i) - alfaeff/bp%TABLE%rb00(i,j)*bp%TABLE%heatflux00(i,j)
446  endif
447  if(n4 > 6) then
448  bp%TABLE%Tstd00(j) = vtmp(7) !the last value in col
449  bp%TABLE%rstd00(j) = vtmp(8)
450  endif
451  enddo
452  enddo
453 
454  bp%TABLE%spline = inttmp == 1
455  bp%TABLE%small_1 = (bp%TABLE%tsurf00(2)-bp%TABLE%tsurf00(1))/100.d0
456  bp%TABLE%small_2 = (bp%TABLE%press00(2)-bp%TABLE%press00(1))&
457  /100.d0
458 
459 
460  if(n4 <= 6) then
461  do j = 1,bp%TABLE%ny_table
462 
463  err = 1d99
464  count = 0
465  if( j <=2) then
466  tss = (bp%TABLE%tsurf00(1) + bp%TABLE%tsurf00(bp%TABLE&
467  %nx_table))/2
468  else
469  tss = bp%TABLE%Tstd00(j-1) + &
470  (bp%TABLE%Tstd00(j-1) - bp%TABLE%Tstd00(j-2))/&
471  (bp%TABLE%press00(j-1) - bp%TABLE%press00(j-2))*&
472  (bp%TABLE%press00(j) - bp%TABLE%press00(j-1))
473  endif
474 
475  do while (count < 20 .and. err > bp%TABLE%small_1)
476  count = count +1
477  call steadytemp(bp,tss,bp%TABLE%press00(j),out0,rss,g)
478  call steadytemp(bp,tss-bp%TABLE%small_1/2d0,bp%TABLE&
479  %press00(j),out_1,rss,g)
480  call steadytemp(bp,tss+bp%TABLE%small_1/2d0,bp%TABLE&
481  %press00(j),out1,rss,g)
482  tss = tss - out0/(out1-out_1)*bp%TABLE%small_1
483  err = abs(out0)
484  enddo
485  bp%TABLE%Tstd00(j) = tss
486  call steadytemp(bp,tss,bp%TABLE%press00(j),out0,rss,g)
487  bp%TABLE%rstd00(j) = rss
488  if(rank == 0) write(*,'(i3,1p3e12.3,0p,A11,1p5e12.3)')count,bp%TABLE%press00(j),tss,rss, &
489  '<--- steady',out0,g
490  enddo
491 
492  endif
493 
494  close(32)
495  deallocate(vtmp)
496 
497 !--------------------------------------------------
498  RETURN
499  END SUBROUTINE readtable
500 !******************************************************
501 
502 !******************************************************
503  SUBROUTINE steadytemp(bp,TIN,pIN,out,rb,g)
504 
505  IMPLICIT NONE
506  include 'mpif.h'
507 !----------------------------------------------------------------------
508  TYPE(parameter_structure),POINTER :: bp
509  INTEGER :: jj,kk
510  REAL(DBL) :: tin,pin,out
511  REAL(DBL) :: g,rb,to,dy,alfa,fx2
512 !----------------------------------------------------------------------
513 
514  to = bp%To
515 
516 
517  jj = 0;kk = 0;
518  call polin2(bp,bp%TABLE%tsurf00,bp%TABLE%press00,bp%TABLE%heatflux00,&
519  bp%TABLE%nx_table,bp%TABLE%ny_table,tin,pin,g,jj,kk)
520  call polin2(bp,bp%TABLE%tsurf00,bp%TABLE%press00,bp%TABLE%rb00, &
521  bp%TABLE%nx_TABLE,bp%TABLE%ny_table,tin,pin,rb,jj,kk)
522  call polin2(bp,bp%TABLE%tsurf00,bp%TABLE%press00,bp%TABLE%fxsq00, &
523  bp%TABLE%nx_TABLE,bp%TABLE%ny_table,tin,pin,fx2,jj,kk)
524  alfa = bp%alfac*( one + bp%TABLE%chi + fx2)
525 
526  out = g - (tin - to)*rb/alfa
527 
528  RETURN
529  END SUBROUTINE steadytemp
530 !******************************************************
531 
532 !****************************************************
533  SUBROUTINE check_input_range(bp)
534 
535  IMPLICIT NONE
536 !----------------------------------------------------------------------
537  TYPE(parameter_structure),POINTER :: bp
538  INTEGER :: ierror
539  LOGICAL :: check(20)
540 !-----------------------------------------------------------------------
541  check = .true.
542  check(1) = bp%a_p > zero
543  check(2) = bp%n_p >zero .AND. bp%n_p < 10.0
544  check(3) = bp%Pref > zero .AND. bp%Pref < 200.0
545  check(4) = bp%Ac > 100.0
546  check(5) = bp%eg_ru > 100.0
547  check(6) = bp%ec_ru >100.0
548  check(7) = bp%alfac > zero .AND. bp%alfac < 1.0
549  check(8) = bp%C > zero .AND. bp%C < 1.0
550  check(9) = bp%lamg > zero .AND. bp%lamg < 1.0
551  check(10) = bp%To > 100.0 .AND. bp%To < 1000.0
552  check(11) = bp%Tignition > bp%To
553  check(12) = bp%Tstar0 > bp%Tignition .AND. bp%Tstar0 < 1.d4
554  check(13) = bp%ixsymm >= 0 .AND. bp%ixsymm < 3
555  check(14) = bp%Tsurf > 100.0 .AND. bp%Tsurf < bp%Tstar0
556 
557  IF(.NOT. all(check) ) THEN
558  write(*,*) 'ROCBURN CHECK_INPUT_RANGE'
559  write(*,*) 'INPUTS OUT OF RANGE'
560  write(*,*) 'CHECK', check
561  CALL mpi_abort(bp%comm, 1, ierror)
562  stop
563  ELSE
564  write(*,*)'ALL VARIABLES IN SPECIFIED range'
565  ENDIF
566 
567 !-----------------------------------------------------------------------
568  RETURN
569  END SUBROUTINE check_input_range
570 !===========================================================================
571 !
572 
573 
574 !***************************************************************************
575  SUBROUTINE burn_finalize_0d(bp)
576 
577  IMPLICIT NONE
578 !-----------------------------------------------------------------------
579  TYPE(parameter_structure),POINTER :: bp
580 !----------------------------------------------------------------------------
581 
582  DEALLOCATE( bp)
583 
584  END SUBROUTINE burn_finalize_0d
585 
586  END MODULE setup_py
void zero()
Sets all entries to zero (more efficient than assignement).
subroutine check_input_range(bp)
Definition: setup_py.f90:533
const NT & d
double xmax() const
subroutine burn_init_0d(bp, comm, IN_DIR, nx_read, To_read)
Definition: setup_py.f90:50
subroutine get_time_step_1d(bp, rb, Toa, dt_max)
Definition: setup_py.f90:30
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:354
int status() const
Obtain the status of the attribute.
Definition: Attribute.h:240
subroutine read_properties(bp, IN_DIR)
Definition: setup_py.f90:89
const std::string & unit() const
Obtain the unit of the attribute.
Definition: Attribute.h:200
subroutine steadytemp(bp, TIN, pIN, out, rb, g)
Definition: setup_py.f90:503
void int int int REAL REAL REAL * z
Definition: write.cpp:76
std::ostream & out()
blockLoc i
Definition: read.cpp:79
subroutine polin2(bp, x1a, x2a, y12a, m, n, x1, x2, y, j, k)
Definition: data_py.f90:106
void int int REAL * x
Definition: read.cpp:74
blockLoc pin(const blockLoc &l) const
Definition: split.cpp:77
subroutine burn_finalize_0d(bp)
Definition: setup_py.f90:575
virtual std::ostream & print(std::ostream &os) const
j indices j
Definition: Indexing.h:6
NT dy
subroutine readtable(bp, IN_DIR)
Definition: setup_py.f90:357
static int rank
Definition: advectest.C:66
subroutine grid(bp)
Definition: setup_py.f90:257
unsigned char g() const
Definition: Color.h:69