Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PLAG_InjcMakeParticle.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: set the next particle diameter and superparticle loading
26 ! for the multiphase injection algorithm.
27 !
28 ! Description: none.
29 !
30 ! Input: region = current region
31 ! injcDiamDist = injection model type
32 ! diam = particle diameter
33 ! spLoad = superparticle loading
34 !
35 ! Output: diam and spLoad
36 !
37 ! Notes: none.
38 !
39 !******************************************************************************
40 !
41 ! $Id: PLAG_InjcMakeParticle.F90,v 1.5 2008/12/06 08:44:33 mtcampbe Exp $
42 !
43 ! Copyright: (c) 2002 by the University of Illinois
44 !
45 !******************************************************************************
46 
47 SUBROUTINE plag_injcmakeparticle( region, injcDiamDist, diam, spLoad )
48 
49  USE moddatatypes
50  USE moddatastruct, ONLY : t_region
51  USE modglobal, ONLY : t_global
52  USE modpartlag, ONLY : t_plag_input
54  USE moderror
55  USE modparameters
57  IMPLICIT NONE
58 
59 ! ... parameters
60  TYPE(t_region) :: region
61 
62  INTEGER :: injcdiamdist
63  REAL(RFREAL) :: diam, spload
64 
65 ! ... loop variables
66 
67 ! ... local variables
68  CHARACTER(CHRLEN) :: rcsidentstring
69 
70  REAL(RFREAL) :: diammeanlog, injcdiammean, injcstddev
71  REAL(RFREAL) :: alpha, diampeaklog, injcdiammax, injcdiammin, &
72  injcdiampeak, power,valmax
73  INTEGER :: locmaxpdf
74 
75  TYPE(t_plag_input), POINTER :: plaginput
76  TYPE(t_global), POINTER :: global
77  REAL(RFREAL), POINTER :: pdfvalues(:,:)
78 
79 !******************************************************************************
80 
81  rcsidentstring = '$RCSfile: PLAG_InjcMakeParticle.F90,v $ $Revision: 1.5 $'
82 
83  global => region%global
84 
85  CALL registerfunction( global, 'PLAG_InjcMakeParticle',&
86  'PLAG_InjcMakeParticle.F90' )
87 
88 ! Select injection model ------------------------------------------------------
89 
90  SELECT CASE(injcdiamdist)
91 
92 !- Compute particle diameter based on Log normal distribution -----------------
93 
94  CASE (plag_injc_lognorm)
95  injcdiammean = region%plagInput%injcDiamMean
96  injcstddev = region%plagInput%injcStdDev
97 
98  diammeanlog = log(injcdiammean)
99  diam = rand1lognormal(diammeanlog,injcstddev,region%randData)
100  spload = region%plagInput%spLoad
101 
102 !- Compute particle diameter based on skewed Log distribution -----------------
103 
104  CASE (plag_injc_logskwd)
105  injcdiampeak = region%plagInput%injcDiamMean
106  injcdiammin = region%plagInput%injcDiamMin
107  injcdiammax = region%plagInput%injcDiamMax
108  injcstddev = region%plagInput%injcStdDev
109 
110  power = 2.0_rfreal
111  diampeaklog = log(injcdiampeak)
112 
113  alpha = diampeaklog + injcstddev*injcstddev*power/ &
114  ( (injcdiammax/injcdiampeak)**power - 1.0_rfreal)
115 
116  diam = plag_rand1logskewed(injcdiampeak, injcstddev, injcdiammin, &
117  injcdiammax, alpha, power, region%randData )
118  spload = region%plagInput%spLoad
119 
120  CASE (plag_injc_pdf)
121  pdfvalues => region%plagInput%PDF%pdfvalues
122  locmaxpdf = region%plagInput%PDF%locMax
123  valmax = region%plagInput%PDF%valMax
124 
125  diam = rand1imposedpdf(region%randData,pdfvalues,locmaxpdf,valmax)
126  spload = region%plagInput%spLoad
127 
128  CASE default
129  CALL errorstop( global,err_reached_default,__line__ )
130 
131  END SELECT
132 
133 ! finalize --------------------------------------------------------------------
134 
135  CALL deregisterfunction( global )
136 
137 CONTAINS
138 
139 !******************************************************************************
140  REAL(RFREAL) FUNCTION plag_rand1logskewed(dPeak,sDev,dMin,dMax,alpha, &
141  power,rdata)
142 !******************************************************************************
143 ! Skewed logarithmic distribution
144 ! dPeak = peak
145 ! sdev = standard deviation
146 ! dMin = minimum
147 ! dMax = maximum
148 ! alpha = median
149 ! power = shape parameter
150 
151  REAL(RFREAL), INTENT(IN) :: dmax,dpeak,dmin,sdev,alpha,power
152  TYPE(t_rand_data), INTENT(INOUT) :: rdata
153 
154  INTEGER, PARAMETER :: itermax = 1000
155  INTEGER :: iter
156 
157  REAL(RFREAL) :: dlognorm, fskewedratio, xdistrand
158 
159  DO iter = 1, itermax
160  dlognorm = rand1lognormal(alpha,sdev,rdata)
161 
162 ! decide to either accept or reject dLogNorm ----------------------------------
163 
164  IF ( dlognorm >= dmin .AND. dlognorm <= dmax ) THEN
165  xdistrand = rand1uniform(rdata)
166 
167  fskewedratio = 1.0_rfreal - ( (1.0_rfreal-(dlognorm/dmax)**power) &
168  * (1.0_rfreal-(dmin/dlognorm)**power) )
169  IF ( xdistrand > fskewedratio ) THEN
170  plag_rand1logskewed = dlognorm
171  goto 8
172  END IF ! xDistRand
173 
174  END IF ! dLogNorm
175 
176  END DO ! iTer
177 
178  WRITE(stdout,'(A)') solver_name//'### WARNING: PLAG_rand1LogSkewed failed!'
179  WRITE(stdout,'(A)') solver_name//'### Setting random value to peak'
180 
181  plag_rand1logskewed = dpeak
182 
183 8 CONTINUE
184 
185  END FUNCTION plag_rand1logskewed
186 !******************************************************************************
187 
188 END SUBROUTINE plag_injcmakeparticle
189 
190 !******************************************************************************
191 !
192 ! RCS Revision history:
193 !
194 ! $Log: PLAG_InjcMakeParticle.F90,v $
195 ! Revision 1.5 2008/12/06 08:44:33 mtcampbe
196 ! Updated license.
197 !
198 ! Revision 1.4 2008/11/19 22:17:46 mtcampbe
199 ! Added Illinois Open Source License/Copyright
200 !
201 ! Revision 1.3 2005/05/31 21:36:38 fnajjar
202 ! Bug Fix to add spload for PLAG_INJC_PDF model
203 !
204 ! Revision 1.2 2005/04/25 18:39:10 luca1
205 ! Imposed PDF from file option for random particle ejection
206 !
207 ! Revision 1.1 2004/12/01 20:57:41 fnajjar
208 ! Initial revision after changing case
209 !
210 ! Revision 1.4 2004/06/16 23:06:33 fnajjar
211 ! Renamed variabled for CRE kernel
212 !
213 ! Revision 1.3 2003/11/21 22:35:51 fnajjar
214 ! Update Random Number Generator
215 !
216 ! Revision 1.2 2003/09/17 21:05:13 fnajjar
217 ! Added infrastructure for skewed Log distribution in injection model
218 !
219 ! Revision 1.1 2002/10/25 14:16:31 f-najjar
220 ! Initial Import of Rocpart
221 !
222 !******************************************************************************
223 
224 
225 
226 
227 
228 
229 
REAL(RFREAL) function rand1imposedpdf(rdata, pdfvalues, locMax, valmax)
Definition: ModRandom.F90:398
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
subroutine plag_injcmakeparticle(region, injcDiamDist, diam, spLoad)
REAL(RFREAL) function rand1uniform(rdata)
Definition: ModRandom.F90:345
REAL(RFREAL) function plag_rand1logskewed(dPeak, sDev, dMin, dMax, alpha, power, rdata)
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
unsigned char alpha() const
Definition: Color.h:75
subroutine deregisterfunction(global)
Definition: ModError.F90:469
REAL(RFREAL) function rand1lognormal(logmed, gdev, rdata)
Definition: ModRandom.F90:380