Beruflich Dokumente
Kultur Dokumente
| |
= + <
|
\ .
= > . < +
= + > + . < +
= > +
d
bt
t
d
d
min n
d d d
n
min n
d n d d n
n
d n
t
p p p t t
t
p t
p p t t t t t t
t
p t
p p t t t t t t t t
t
p p t t t
(7)
Figure 6: Pressure-time curve for a free air blast wave approximation of the negative phase
2.2.4 Wave Form Parameter
The decay or form parameter b in the Friedlander equation (1) describes the decay of the pressure-
time curve.
Kinney [6] and Baker [2] calculate the parameter b by using the impulse of the positive phase. This
is also done in a former report Larcher [8]. The differences are shown in Figure 7.
12
0
2
4
6
8
10
0 5 10 15 20 25 30 35 40
Z [m/kg
1/3
]
b
[
-
]
Kinney
Baker
Parameter b by using the impulse of the
postive phase
Figure 7: Wave form parameter b different methods
The exponential trend line for the curve generated by the impulse function has the following
equation:
1.1975
1/3
5.2777
with Z [m/kg ]
b Z
=
(8)
The presented equations describe the complete behaviour of an air blast wave under spherical or
hemispherical conditions.
13
3 Air Blast Loading Function in EUROPLEXUS
There are several simulation models for air blast waves (see technical note, Larcher [8]). One
possibility is a calculation, which uses only the structural part. The behaviour of the explosive and
the behaviour of the intermediate air are considered by using a pressure-time function.
The pressure-time function is applied by using an impedance material (IMPE), which can be used
with special elements to load a structure. The name of this material is AIRB. The pressure-time
functions shown in chapter 2 are implemented.
3.1 Used Function
The modified Friedlander equation (1) is used for the implementation. Both, the parameters of
Kingery [5] and Baker [1] are implemented for the maximum pressure. The values of Kingery are
used for both types to calculate the arrival time and the time of duration.
The decay parameter b is calculated using the formula in section 2.2.4.
The Friedlander equation can not be used for the negative part of the pressure-time function.
Therefore, the procedure presented in section 2.2.3 is used to calculate the negative pressure p
min
and the duration of the negative phase t
n
. The form of the negative part is represented with a bilinear
curve. The pressure before and after the positive and negative phase is set to 0 Pa.
The loading of the air blast wave acts in a short time. If big elements are used, the time steps
calculated by using the size of the elements could be too long to resolve the peak pressure.
Therefore, the time step in the positive phase is chosen to the twentieth part of the time of duration.
3.2 Implementation
There are several possibilities to adapt the pressure-time function in EUROPLEXUS:
- The location of the charge can be defined by choosing a node with the keyword NODE.
Alternatively, the coordinates of the charge can be given by using the keywords X, Y, and
Z.
- The mass of the charge (in kg) has to be specified with the keyword MASS.
- The function for the peak pressure (Kingery, Kinney) can be chosen by the keyword CONF.
- The keyword OPOS indicates a pressure-time function, which uses only positive values and
disregards the negative part of the wave. In this part, the pressure is set to 0 Pa. This feature
14
could be helpful for shock tube tests, which show a behaviour similar to air blast waves in
the positive part but not in the negative part.
- The start time of the detonation can be defined with TINT. The default value is 0 s. To avoid
a long calculation of the structure without any loading of the structure (up to the arrival of
the air blast wave to the first element loaded), the start time of the detonation con be defined
as negative. This can also be done automatically in a way that the calculation starts shortly
before the air blast wave reaches the first element. The keyword TAUT indicates this
automatic start time.
Details are described in the EUROPLEXUS Users Manual [4].
3.3 AIRB and Debris
EUROPLEXUS provides the possibility to develop flying particles (so-called debris) from failed
elements. This can be used to simulate the behaviour of glass splinters after the failure of the glass.
A debris has only a diameter and a mass. The influence of the air blast on the debris should also be
considered. Due to the fact that the geometry of the debris is not known especially the size of the
surface, which is loaded by the air blast wave an intermediate value between the minimum surface
and the maximum surface of the debris can be chosen for the calculation of the AIRB parameter.
For each shell element and beam element a minimum and a maximum area are estimated. By using
the keyword AFLY the minimum (AFLY = 0.0) or the maximum (AFLY = 1.0) value is used.
Values of ALFY between 0.0 and 1.0 interpolate linearly between these two values. The default
value is 0.5. This possibility is only available for shell elements. For solid elements, the cross
section of the debris is used.
3.4 AIRB for Z>40
The equation from Kingery [5] are not applicable for values of Z>40 (polynomial base). Due to the
fact, that the debris are also loaded from the AIRB command and the distance of the debris to the
charge could be big, the values for bigger scaled distances should be available also for the AIRB
command.
Several assumptions are done for the arrival time, the peak pressure and the time of duration. The
negative part of the equation is not changed due to the fact that these equations are not polynomial
one.
15
3.4.1 Arrival Time
The arrival time for a scaled distance Z>40 is calculated in a way, that the sound velocity is used
from reaching the scaled distance of Z=40 m/kg
1/3
. This is done by the following equation:
( ) ( 40)
( ) ( 40)
343 m/s
a a
d Z d Z
t Z t Z
=
= = + (9)
3.4.2 Peak Pressure
For the peak pressure, the equations of Kinney [6] can be used. This equation does not use
polynomial base and therefore, this equation does not have a limit. The diagram of Baker [2] shows
for the peak pressure (incident as well as reflected condition) a quasi linear behaviour in the double
logarithmic scale. This linear curve is used to expand the equations from Kingery also for higher
distances. The hemispherical case is considered by using a factor 2.0 of spherical case.
The incident pressure can be approximated with:
p = 10
-1.10 log(Z) + 5.00
for Z>40 m/kg
1/3
The junction between both parts of the equations (Kingery [5] and Baker [2]) is not possible on an
analytic way. It can be shown (see Figure 8) that the difference between both equations is very
small in the range of Z=40 m/kg
1/3
. Therefore, the equation of Baker is used for values Z>40
without any intersection to the equation of Kingery.
1000
1500
2000
2500
3000
3500
4000
10 20 30 40 50 60 70 80 90 100
Z [m/kg
1/3
]
p
[
P
a
]
Kingery
Baker
16
Figure 8: Comparison between the equations of Kingery and Baker for incident peak pressure
The reflected peak pressure of Baker can be approximated with:
p = 10
-1.147 log (Z) + 5.375
Pa for Z>40 m/kg
1/3
The comparison between the curve of Kingery and the curve of Baker in the range of Z=40 shows
(Figure 9) that an intersection is also not necessary for the reflected pressure.
0
4000
8000
12000
16000
20000
0 10 20 30 40 50 60 70 80 90 100
Z [m/kg
1/3
]
p
[
P
a
]
Kingery
Baker
Figure 9: Comparison between the equations of Kingery and Baker for reflected peak pressure
3.4.3 Time of Duration
The time of duration in the diagram of Baker can also be approximated with a line, which has the
following equation:
t
d
= 10
0.230 log(Z) - 2.594
s for Z>40 m/kg
1/3
There is a bigger difference in the time of duration between Kingery and Baker. Both curves not cut
themself. Therefore, for values Z>40 the diagram of Baker is used accepting a step at this point.
17
0
2
4
6
8
10
0 10 20 30 40 50 60 70 80 90 100
Z [m/kg
1/3
]
t
[
m
s
]
Kingery
Baker
Figure 10: Comparison between the equations of Kingery and Baker for time of duration
All these functions are implemented in the AIRB command in EUROPLEXUS for values of
Z>40 m/kg
1/3
.
18
4 External Program for AIRB Calculations
The functions described in chapters 2 and 3 are implemented in EUROPLEXUS. Sometimes these
values are also needed e.g. only for one point. To simplify the calculation of these values, a small
program is written (airb.f), which uses the same subroutine for the calculation of the parameter as
EUROPLEXUS.
In addition, this program can be used for several special calculations. The units used for this
program are: s, kg, Pa. The names of the parameters and their units are shown in Table 1.
Parameter Description Unit
Z_BLAST scaled distance m/kg
1/3
P_MAX peak pressure Pa
T_START arrival time s
T_D time of duration (positive) s
P_NEG minimum pressure Pa
T_NEG time of duration (negative) s
B_BLAST form parameter b -
I_POS positive impulse Pa s
D distance m
CHARGE charge kg
P pressure Pa
Table 1: Parameters of the program AIRB
The program has the following possibilities:
- Main values (1): scaled distance, peak pressure, arrival time, time of duration of the positive
phase, positive impulse, minimum pressure, time of duration of the negative phase, form
parameter
19
- Function of distance: (2): for a given charge, several parameters can be calculated as a
function of the distance.
- Pressure-time curve (3): for a given distance and charge, the pressure-time function is
calculated.
- Pressure-distance curve (4): for a given time and charge, the pressure is calculated as a
function of the distance. This results in the form of the wave at a certain time.
- Given: P_MAX Z_BLAST (5): this function interpolates the pressure-distance function
to get for a maximum pressure the corresponding scaled distance. To get also the charge and
the distance, a second parameter is needed (see 6)
- Given: P_MAX, I_POS D, CHARGE (6): this function calculates the scaled distance
and, in addition to the function 5, also the distance and the charge by using the positive
impulse. If the peak pressure and the positive impulse are coming from experiments, the
result should be compared with the time of duration (if given) to see the correspondence.
- Given: I_POS, CHARGE D, Z_BLAST (7): this function calculates the distance (and
also the scaled distance) for a given charge and a given positive impulse.
All calculations need the input of the equation chosen. This could be a Kingery or a Kinney
approximation with several conditions (spherical/hemispherical/incident/reflected). For the
functions 2, 3, and 4 also the range for the output and the step size has to be defined.
The output can also be done into a file.
20
5 Conclusion
The usage of a pressure-time function for a structure loaded by an air blast wave is a very effective
method. Indeed, this method neglects the influence of reflections, shadowing and channelling.
The AIRB function, used in EUROPLEXUS is presented, which uses several equation from the
literature to describe an air blast wave. The AIRB function is also used from the batch program
airb.exe. This program is helpful to determine the parameters of an air blast wave in an easy way
and allows also the calculation of missing air blast parameters, if only some of them are given.
21
6 References
[1] Baker, Wilfrid E.: Explosions in the Air, University of Texas Pr., Austin, 1973.
[2] Baker, W.E.; Cox, P.A.; Westine, P.S.; Kulesz, J.J.; Strehlow, R.A.: Explosion Hazards and
Evaluation, Elsevier, Amsterdam, 1983.
[3] Drake, J.; Twisdale, L.; Frank, R.; Dass, W.; Rochefort, M.; Walker, R.; Britt, J.; Murphy, C.;
Slawson, T.; Sues, R.: Protective construction design manual, Tech. Rep. ESL-TR-87-57, Air
Force Engineering and Services Center, Tyndall Air Force Base, Florida (1989).
[4] EUROPLEXUS, Users Manual, online version.
[5] Kingery, Charles N.; Bulmash, Gerald: Airblast Parameters from TNT Spherical Air Burst
and Hemispherical Surface Burst, Defence Technical Information Center, Ballistic Research
Laboratory, Aberdeen Proving Ground, Maryland, 1984.
[6] Kinney, Gilbert F.; Graham, Kenneth J.: Explosive Shocks in Air, Springer, Berlin, 1985.
[7] Krauthammer, T.; Altenberg, A.: Negative phase blast effects on glass panels, International
Journal of Impact Engineering, 24 (1), pp. 1-18; 2000.
[8] Larcher, M.: Simulation of the Effects of an Air Blast Wave. JRC Technical Note, Pubsy
JRC41337, Ispra 2007.
[9] Protective Design Center, United States Army Corps of Engineers: CONWEP, Conventional
Weapons Effects, https://pdc.usace.army.mil/software/conwep/, 22.May 2007.
22
7 Apendix
7.1 EUROPLEXUS Code
m_material_i_airb.ff
C M_MATERIAL_I_AIRB TOUS FCASADEI 08/07/25
02:11:54
MODULE M_MATERIAL_I_AIRB
*
* material of type "air blast" (16_26)
*
USE M_MATERIALS
USE M_MATERIALS_ARRAY
*
IMPLICIT NONE
SAVE
*
PRIVATE
PUBLIC :: MI_AIRB, CL_AIRB, INIT_AIRB
*
CONTAINS
*=============================================
SUBROUTINE MI_AIRB (INUMLDC, X)
* ------------------------------------------------------------------
* impedance : air blast m.larcher 04-07
* ------------------------------------------------------------------
* iop=26 (airb)
* xmut(1) = x-coordinate of explosive charge
* xmut(2) = y-coordinate of explosive charge
* xmut(3) = z-coordinate of explosive charge
* xmut(4) = mass of explosive charge (in kg)
* xmut(5) = initial time of the explosion
* xmut(6) = choose of different explosion models
* 1 = unconfined (full space), reflected (kingery)
* 2 = unconfined (full space), not reflected (kingery)
* 3 = unconfined (full space), not reflected (baker)
* 4 = half-confined (half space), reflected (kingery)
* 5 = half-confined (half space), not reflected
(kingery)
* xmut(8) = flag for only positive pressure
*
INCLUDE 'NONE.INC'
*
INCLUDE 'CARMA.INC'
INCLUDE 'CONTRO.INC'
INCLUDE 'POUBTX.INC'
INCLUDE 'REDCOM.INC'
*
*----- variables globales :
INTEGER, INTENT(IN) :: INUMLDC
REAL(8), INTENT(IN) :: X(IDIM,*)
*
*----- variables locales :
INTEGER, PARAMETER :: NMOT=9 , LENX=8 , LENI =
1
CHARACTER*4 :: MOT(NMOT)
INTEGER :: KOPT(NMOT), IOP, IH, NC(NPTL), NODE
LOGICAL :: IMPRIM
*
DATA MOT/'X ','Y ','Z
','MASS','TINT','CONF','NODE',
& 'TAUT','OPOS'/
*
INTEGER, PARAMETER :: N_MSG = 8 , LG_FMT = 350
CHARACTER(LG_FMT) :: GET_FMT(N_MSG)
*IF FRANCAIS
CHARACTER(32), PARAMETER :: NOM='IMPEDANCE
(EXPLOSION EN AIR)'
DATA GET_FMT(:) /
>'X-COORD DE LA CHARGE',
>'Y-COORD DE LA CHARGE',
>'Z-COORD DE LA CHARGE',
>'MASSE DE LA CHARGE',
>'TEMPS INITIAL DE L EXPLOSION',
>'CONFINEMENT (1=LIBRE, REFLECHIE, KINGERY,
>2=LIBRE, NO REFLECHIE,KINGERY,
>3=LIBRE, REFLECHIE,BAKER,
>4=DEMI-ESPACE, REFLECHIE,KINGERY,
>5=DEMI-ESPACE, NO REFLECHIE,KINGERY)',
>'NOEUD DE LA CHARGE',
>'ONLY POSITIVE PRESSURE?'/
CELSE
CHARACTER(32), PARAMETER :: NOM='IMPEDANCE
(AIR BLAST)'
DATA GET_FMT(:) /
>'X-COOR OF THE CHARGE',
>'Y-COOR OF THE CHARGE',
>'Z-COOR OF THE CHARGE',
>'MASS OF THE CHARGE',
>'INITIAL TIME OF THE EXPLOSION',
>'CONFINEMENT (1=UNCONFINED,
REFLECTED,KINGERY,
>2=UNCONFINED, NOT REFLECTED,KINGERY,
>3=UNCONFINED, REFLECTED,BAKER,
>4=HALF-SPACE, REFLECTED,KINGERY,
>5=HALF-SPACE, NOT REFLECTED,KINGERY)',
>'NODE OF THE CHARGE',
>'ONLY POSITIVE PRESSURE?'/
CENDIF
*
CALL CREATE_MATERIAL (LENX, LENI, 0)
NEWMAT%NAME = NOM
NEWMAT%TYPE = 16 !! IMPEDANCE
NEWMAT%MATENT(1) = 26 !! NUMERO DE
L'IMPEDANCE
NEWMAT%NUMLDC = INUMLDC
NEWMAT%LGECR = LGECR(NEWMAT%TYPE)
*
*----- lecture des parametres
! CALL
LIRVAL(NMOT,MOT,NEWMAT%MATVAL,KOPT)
KOPT(:) = 0
*
11 CALL LIRMOT (MOT, NMOT, IOP)
IF (IOP > 0) THEN
KOPT(IOP) = 1
SELECT CASE (IOP)
CASE (1:4,6) ! X, Y, Z, MASS, TINT, CONF
CALL LIRE(3)
NEWMAT%MATVAL(IOP) = DPREC
CASE (5) ! TINT
IF (KOPT(8) /= 0) THEN
CALL ERRMSS('MAT_AIRB',
> 'TINT AND TAUT CANT BE USED
TOGETHER')
STOP 'MAT_AIRB 5'
ENDIF
CALL LIRE(3)
NEWMAT%MATVAL(IOP) = DPREC
23
CASE (7) ! POIN
CALL LIRLEC (1, NC, IH)
IF (IH /= 1) THEN
CALL ERRMSS('MAT_AIRB','ONLY ONE NODE
MUST BE GIVEN')
STOP 'MAT_AIRB 4'
ENDIF
NEWMAT%MATVAL(IOP) = NC(1)
CASE (8) ! TAUT
IF (KOPT(5) /= 0) THEN
CALL ERRMSS('MAT_AIRB',
> 'TINT AND TAUT CANT BE USED
TOGETHER')
STOP 'MAT_AIRB 5'
ENDIF
NEWMAT%MATVAL(5)=HUGE(0.D0) ! TAUT
CASE (9) ! OPOS
NEWMAT%MATVAL(8)=1.D0 ! TAUT
END SELECT
GO TO 11
ENDIF
*
*----- donnees completes ? (1, 2, 4 ou 4, 7 indispensables)
IF((KOPT(1)+KOPT(2)+KOPT(4)) /= 3) THEN
IF((KOPT(4)+KOPT(7)) /= 2) THEN
WRITE(BLABLA,1001)
CALL ERRMSS('MAT_AIRB',BLABLA)
STOP 'MAT_AIRB 3'
ENDIF
ENDIF
*
* consistency checks
IF (KOPT(1)+KOPT(7) == 2 .OR. KOPT(2)+KOPT(7) == 2
.OR.
> KOPT(3)+KOPT(7) == 2) THEN
CALL ERRMSS ('MI_AIRB','X,Y,Z AND NODE ARE
MUTUALLY EXCLUSIVE')
ENDIF
IF (KOPT(7) /= 0) THEN
* user has specified node: extract its coordinates
NODE = INT (NEWMAT%MATVAL(7) + 0.1)
NEWMAT%MATVAL(1) = X(1,NODE)
NEWMAT%MATVAL(2) = X(2,NODE)
IF (IDIM == 3) NEWMAT%MATVAL(3) = X(3,NODE)
ENDIF
IF (KOPT(3) /= 0) THEN
IF (IDIM < 3) CALL ATTMSS ('MI_AIRB','Z UNUSED
IN 2D')
ENDIF
*
* default values
IF((KOPT(5) == 0).AND.(KOPT(8) == 0))
NEWMAT%MATVAL(5)=-HUGE(0.D0)
! TINT
IF(KOPT(6) == 0) NEWMAT%MATVAL(6)=1.D0 !
CONF
*
*----- impressions
WRITE(BLABLA,1000)
NEWMAT%NUMLDC,NEWMAT%NAME
CALL MECTSG(BLABLA)
IF(IMPRIM(8)) THEN
CALL
MECVAL(GET_FMT(1),NEWMAT%MATVAL(1))
CALL
MECVAL(GET_FMT(2),NEWMAT%MATVAL(2))
CALL
MECVAL(GET_FMT(3),NEWMAT%MATVAL(3))
CALL
MECVAL(GET_FMT(4),NEWMAT%MATVAL(4))
IF(NEWMAT%MATVAL(5)>1.D20) THEN
CALL MECTEX(GET_FMT(5),'START TIME')
ELSEIF(NEWMAT%MATVAL(5)<-1.D20) THEN
CALL MECTEX(GET_FMT(5),'AUTOMATIC')
ELSE
CALL
MECVAL(GET_FMT(5),NEWMAT%MATVAL(5))
ENDIF
CALL
MECVAL(GET_FMT(6),NEWMAT%MATVAL(6))
IF (KOPT(7) /= 0) THEN
CALL
MECNUM(GET_FMT(7),INT(NEWMAT%MATVAL(7)))
ENDIF
IF(NEWMAT%MATVAL(8)>0.5D0) THEN
CALL MECTEX(GET_FMT(8),'ONLY POSITIVE
PRESSURES')
ELSE
CALL MECTEX(GET_FMT(8),'ALSO NEGATIVE
PRESSURES')
ENDIF
ENDIF
*
*IF FRANCAIS
1000 FORMAT('LOI NUMERO',I5,' : ',A)
1001 FORMAT('LA DIRECTIVE "AIRB" EST
INCOMPLETE')
CELSE
1000 FORMAT('LAW NUMBER',I5,' : ',A)
1001 FORMAT('THE DIRECTIVE "AIRB" IS
INCOMPLETE')
CENDIF
*
END SUBROUTINE MI_AIRB
*==========================================
SUBROUTINE CL_AIRB (MAT_CUR, ECR, D, P,
DTAIRB)
* ------------------------------------------------------------------
* cond. aux limites air blast m.larcher 04-07
* ------------------------------------------------------------------
* mat_cur : current material
* matval(1) = x-coordinate of explosive charge
* matval(2) = y-coordinate of explosive charge
* matval(3) = z-coordinate of explosive charge
* matval(4) = mass of explosive charge (in kg)
* matval(5) = initial time of the explosion
* matval(6) = choose of different explosion models
* 1 = unconfined (full space), reflected (kingery)
* 2 = unconfined (full space), not reflected
(kingery)
* 3 = unconfined (full space), not reflected (kinney)
* 4 = half-confined (half space), reflected (kingery)
* 5 = half-confined (half space), not reflected
(kingery)
* matval(8) = flag only positive pressure
* d : distance between charge and clxx element centroid
* (already computed in the clxx element)
* p : blast pressure (output)
* ecr(1) : pressure (output)
* dtairb : maximal time step (output)
*
IMPLICIT NONE
*
INCLUDE 'TEMPX.INC' ! T = CURRENT TIME
INCLUDE 'TEMPS1.INC' ! TINIZI = INITIAL TIME
*
24
*--- variables globales
TYPE(MATERIAL), INTENT(INOUT) :: MAT_CUR
REAL(8), INTENT(IN) :: D
REAL(8), INTENT(OUT) :: P
REAL(8), INTENT(INOUT) :: DTAIRB
REAL(8), INTENT(INOUT) :: ECR(*)
*--- variables locales
REAL(8) :: T_START ,T_D , T_CURR, T_NEG
REAL(8) :: PARAM1, PARAM2, PARAM3,PARAM4
REAL(8) :: PARAM5, PARAM6, PARAM7,PARAM8
REAL(8) :: P_MAX, B_BLAST , Z_BLAST, U_T_D,
Y_CONWEP,TINT,
> P_MAX1, T_MAX1, T_D1, U_P_MAX, P_NEG,
DTSTAB, CHARGE,Z_BLAST1
REAL(8), DIMENSION(9) :: POLY_T_D
REAL(8), DIMENSION(12) :: POLY_P_MAX
INTEGER :: I, COND, EQU
*
P = 0.D0 ! INITIALIZATION
DTSTAB = DTAIRB !STORING OF THE STABLE TIME
STEP SIZE TO USE
!ALSO SMALLER TIME STEPS FOR THE
FIRST TIME
!STEP WITH AIRB
DTAIRB = HUGE(DTAIRB)
! INITIALISATION - ONLY IN THE POSITIVE
PHASE THE
! TIME STEP SIZE WILL BE CHANGED
EQU = MAT_CUR%MATVAL(6)
CHARGE = MAT_CUR%MATVAL(4)
TINT = MAT_CUR%MATVAL(5)
*----- time of explosion-------------------------------------------
IF (MAT_CUR%MATVAL(5)<-1.D20)
MAT_CUR%MATVAL(5)=TINIZI
*----- air blast pressure
*----- arrival time
IF(EQU<4) THEN
COND=1
ELSE
COND=2
ENDIF
*----- arrival time
CALL TARRIVE_AIRB (CHARGE, D, COND,T_START)
*----- time in the pressure curve
T_CURR = T - TINT - T_START
IF (T_CURR+DTSTAB>0) THEN !ALSO THE TIME
STEP BEFORE THE STARTING
!OF THE AIRB
*----------------------------------------------------------------------
CALL AIRB_PARAMETER(EQU,CHARGE,D, P_MAX,
T_START, T_D,
> P_NEG, T_NEG, B_BLAST)
*end different models
1000 P = P_MAX*(1.D0-T_CURR/T_D)*EXP(-
B_BLAST*T_CURR/T_D)
IF (T_CURR<T_D) THEN ! POSTIVE PHASE IN 20
STEPS
DTAIRB = T_D/20.D0
END IF
IF(MAT_CUR%MATVAL(8)<0.5D0) THEN
IF (T_CURR>T_D . AND . T_CURR<=T_D+T_NEG/2.)
THEN
! NEGATIVE PHASE
P = 2.*P_NEG/T_NEG*(T_D-T_CURR)
ELSE IF (T_CURR>T_D+T_NEG/2. . AND .
T_CURR<=T_D+T_NEG)THEN
! NEGATIVE PHASE
P = 2.*P_NEG/T_NEG*(T_CURR-T_D-T_NEG)
ELSE IF (T_CURR>T_D+T_NEG) THEN
P=0.D0 ! AFTER LOADING
END IF
ELSE IF(T_CURR>T_D) THEN ! NO NEGATIVE
PRESSURE
P=0.D0
ENDIF
IF (T_CURR<0) P=0.D0 !IF TIME STEP BEFORE AIRB
END IF !END OF CALCULATION
(T_CURR+DTSTAB>0)
IF(P<-1D5)P=-1D5
ECR(1) = P
*
END SUBROUTINE CL_AIRB
*=============================================
SUBROUTINE INIT_AIRB (INDOX,X,NUMN)
* ------------------------------------------------------------------
* calculation of the automatic start time of the air blast
m.larcher 02-08
* ------------------------------------------------------------------
* indox : element info
* x : coordinates
* numn : number of the nodes of the elements
*
USE M_MATERIALS
INCLUDE 'NONE.INC'
INCLUDE 'CAREL.INC'
INCLUDE 'CONTRO.INC'
*
*--- variables globales
INTEGER, INTENT(IN) :: INDOX(NELEM,*),NUMN(*)
REAL(8), INTENT(IN) :: X(IDIM,*)
*--- variables locales
REAL(8) :: XC,YC,ZC,DX,DY,DZ, D, T_ARR, T_ARR1
INTEGER :: I,IEL,ITYP,COND,MATTYP,IOP,NNO,IAD
TYPE(MATERIAL),POINTER :: MAT_CUR
LOGICAL :: TAUTO,TINIT
T_ARR1 = HUGE(T_ARR1)
TAUTO = .FALSE.
TINIT = .FALSE.
DO IEL = 1, NELEM
ITYP = INDOX(IEL,1)
MATTYP = INDOX(IEL,2)
IF(MATTYP==16) THEN !IMPE
MAT_CUR => MATERIALS(FNUMAT(IEL))
IOP=MAT_CUR%MATENT(1)
IF(IOP==26) THEN !AIRB
IF(MAT_CUR%MATVAL(5)>1.D20) THEN
TAUTO = .TRUE.
XC = 0.D0
YC = 0.D0
ZC = 0.D0
NNO = NCEL(1,ITYP)
IAD = INDOX(IEL,3)
DO I = 1, NNO ! CENTROID COORDINATES
XC = XC + X(1,NUMN(IAD+I-1))
YC = YC + X(2,NUMN(IAD+I-1))
ZC = ZC + X(3,NUMN(IAD+I-1))
END DO
XC = XC / NNO
YC = YC / NNO
ZC = ZC / NNO
DX = MAT_CUR%MATVAL(1) - XC ! DISTANCE
25
DY = MAT_CUR%MATVAL(2) - YC
DZ = MAT_CUR%MATVAL(3) - ZC
* additional calculations for dtstab required for the partitioning
D = SQRT (DX*DX + DY*DY + DZ*DZ)
IF(MAT_CUR%MATVAL(6)<4) THEN
COND=1
ELSE
COND=2
ENDIF
CALL TARRIVE_AIRB (MAT_CUR%MATVAL(4),
D, COND,T_ARR)
IF(T_ARR<T_ARR1) THEN
T_ARR1 = T_ARR
ENDIF
ELSE
TINIT = .TRUE.
ENDIF
ENDIF
ENDIF
END DO
IF(TAUTO) THEN
IF(TINIT) THEN
CALL ERRMSS('INIT_AIRB','TAUT NOT
COMPATIBLE WITH TINT')
STOP 'INIT_AIRB'
ENDIF
T_ARR1=-0.99*T_ARR1
CALL MECTSG('AUTOMATIC INITIAL TIME FOR
IMPE_AIRB')
CALL MECVAL('THE STARTING TIME IS ',T_ARR1)
DO IEL = 1, NELEM
ITYP = INDOX(IEL,1)
MATTYP = INDOX(IEL,2)
IF(MATTYP==16) THEN
MAT_CUR => MATERIALS(FNUMAT(IEL))
IOP=MAT_CUR%MATENT(1)
IF(IOP==26) THEN !AIRB
MAT_CUR%MATVAL(5) = T_ARR1
ENDIF
ENDIF
END DO
ENDIF
*
END SUBROUTINE INIT_AIRB
*=============================================
SUBROUTINE AIRB_PARAMETER (EQU, CHARGE, D,
P_MAX, T_START, T_D,
> P_NEG, T_NEG, B_BLAST)
* ------------------------------------------------------------------
* cond. aux limites air blast m.larcher 04-07
* ------------------------------------------------------------------
* charge = mass of explosive charge (in kg)
* equ = choose of different explosion models
* 1 = unconfined (full space), reflected (kingery)
* 2 = unconfined (full space), not reflected (kingery)
* 3 = unconfined (full space), not reflected (kinney)
* 4 = half-confined (half space), reflected (kingery)
* 5 = half-confined (half space), not reflected (kingery)
* d : distance between charge and clxx element centroid
* p_max : max peak blast pressure (output)
*
IMPLICIT NONE
*
*--- variables globales
REAL(8), INTENT(IN) :: D, CHARGE
INTEGER, INTENT(IN) :: EQU
REAL(8), INTENT(OUT) :: P_MAX, T_START, T_D,
P_NEG, T_NEG, B_BLAST
*--- variables locales
REAL(8) :: PARAM1, PARAM2, PARAM3,PARAM4
REAL(8) :: PARAM5, PARAM6, PARAM7,PARAM8
REAL(8) :: Z_BLAST, U_T_D, Y_CONWEP,
> P_MAX1, T_MAX1, T_D1, U_P_MAX, Z_BLAST1
REAL(8), DIMENSION(9) :: POLY_T_D
REAL(8), DIMENSION(12) :: POLY_P_MAX
INTEGER :: I,COND
*
*----- air blast pressure
*----- parameters of detonation for all models
Z_BLAST = D/CHARGE**0.333333D0
B_BLAST = 5.2777D0*(Z_BLAST**(-1.1975D0))
P_NEG = MIN(1.D5,79433.D0/(Z_BLAST**1.05D0))
IF(Z_BLAST<0.3D0) THEN
T_NEG = 0.0104D0 * CHARGE**(1./3.)
ELSE IF(Z_BLAST>1.9D0) THEN
T_NEG = 0.0139D0 * CHARGE**(1./3.)
ELSE
T_NEG = (3.125D0 * LOG10(Z_BLAST) + 12.01D0)*
> CHARGE**(1./3.)*1D-3
END IF
*----- conwep is used for all models with different parameters
*----- arrival time
IF(EQU<4) THEN
COND=1
ELSE
COND=2
ENDIF
*----- arrival time
CALL TARRIVE_AIRB (CHARGE, D, COND,T_START)
*----------------------------------------------------------------------
*begin different models
P_MAX=0
T_D=0
P_MAX1=0
T_D1=0
*--------------------------------------------------------------------
*baker incident
IF (EQU==3) THEN
PARAM1 = 808.D0*(1.D0+(Z_BLAST/4.5D0)**2.0)
PARAM2 = SQRT(1.D0+(Z_BLAST/0.048D0)**2.0)
PARAM3 = SQRT(1.D0+(Z_BLAST/0.32D0)**2.0)
PARAM4 = SQRT(1.D0+(Z_BLAST/1.35D0)**2.0)
*------- max pressure for this distance
P_MAX = 1D5 *
PARAM1/(PARAM2*PARAM3*PARAM4)
PARAM5 = 980.D0*(1.D0+(Z_BLAST/0.54D0)**10.D0)
PARAM6 = 1.D0+(Z_BLAST/0.02D0)**3.D0
PARAM7 = 1.D0+(Z_BLAST/0.74D0)**6.D0
PARAM8 = SQRT(1.D0+(Z_BLAST/6.9)**2.0)
T_D = 1D-3 * CHARGE**(1.D0/3.D0) *
>
PARAM5/(PARAM6*PARAM7*PARAM8)
RETURN
END IF
*--------------------------------------------------------------------
* formula for hemispherical reflected in kingery seems to be
wrong.
* therefore, the hemispherical formula is used for the pressure
* by dividing the charge with 1.8
*
IF(EQU==1) THEN
Z_BLAST1 = D/((CHARGE/1.8)**0.33333333D0)
ELSE
Z_BLAST1=Z_BLAST
ENDIF
* kingery spherical
26
IF(EQU==1 .OR. EQU==2) THEN
IF(Z_BLAST<0.888) THEN
U_T_D =
2.26367268496+5.11588554305*LOG10(Z_BLAST)
POLY_T_D = (/-0.686608550419, 0.164953518069,
0.127788499497,
> 0.00291430135946, 0.00187957449227,
0.0173413962543,
> 0.00269739758043, -0.00361976502798, -
0.00100926577934/)
ELSE IF(Z_BLAST>2.28) THEN
U_T_D = -3.130058+3.152472*LOG10(Z_BLAST)
POLY_T_D = (/0.62103, 0.096703, -0.00801302,
0.00482705,
> 0.00187587,-0.002467385,-0.000841116668,
0.00061932910, 0.0/)
ELSE
U_T_D = -
1.33361206714+9.2996288611*LOG10(Z_BLAST)
POLY_T_D = (/ 0.23031841078,-
0.0297944268969,0.0306329542941,
> 0.0183405574074, -0.0173964666286, -
0.00106321963576,
> 0.0056206003128, 0.0001618217499, -
0.0006860188944 /)
END IF
*--------------------------------------------------------------------
* kingery hemispherical
ELSE
IF(Z_BLAST<1.01) THEN
U_T_D =
1.92946154068+5.25099193925*LOG10(Z_BLAST)
POLY_T_D = (/-0.6142276, 0.1301437, 0.13872,
0.039157,
> -0.00475933, -0.00428144, 0.0, 0.0, 0.0/)
ELSE IF(Z_BLAST>2.78) THEN
U_T_D = -3.53626+3.463497*LOG10(Z_BLAST)
POLY_T_D =(/0.6869066, 0.09330353, -0.00058494, -
0.0022688499,
> -0.000295908, 0.0014802986, 0.0, 0.0, 0.0 /)
ELSE
U_T_D = -2.124925+9.2996288*LOG10(Z_BLAST)
POLY_T_D = (/0.31540924, -0.0297944, 0.0306329,
0.018340557,
> -0.0173964,-0.00106321,0.0056206,0.000161821,-
0.00068601889/)
END IF
END IF
*--------------------------------------------------------------------
* kingery spherical, reflected
* the formula in kingery seems to be wrong. therefore, the
hemispherical
* formula is used by dividing the charge with 1.8
*
* if(equ==1) then
* u_p_max = -
0.214362789151+1.35034249993*log10(z_blast)
* poly_p_max = (/3.22958031387, -2.21400538997,
0.35119031446,
* > 0.657599992109, 0.0141818951887, -0.243076636231,
* > -0.0158699803158, 0.0492741184234,
0.00227639644004,
* > -0.00397126276058, 0.0 , 0.0/)
*--------------------------------------------------------------------
IF(Z_BLAST1<40)THEN
* kingery spherical, incident
IF (EQU==2) THEN
U_P_MAX = -
0.214362789151+1.35034249993*LOG10(Z_BLAST1)
POLY_P_MAX = (/2.611368669, -1.69012801396,
0.00804973591951,
> 0.336743114941, -0.00516226351334, -0.0809228619888,
> -0.00478507266747, 0.00793030472242,
0.0007684469735,
> 0.0, 0.0, 0.0/)
*--------------------------------------------------------------------
* kingery hemispherical, reflected (also spherical reflected)
ELSE IF((EQU==1).OR.(EQU==4)) THEN
U_P_MAX = -
0.240657322658+1.36637719229*LOG10(Z_BLAST1)
POLY_P_MAX = (/3.4028321, -2.2103087, -0.218536586,
0.89531958,
> 0.24989, -0.569249, -0.1179168, 0.2241311, 0.0245620, -
0.0455116,
> -0.001909307, 0.003614711/)
*--------------------------------------------------------------------
* kingery hemispherical, incident
ELSE IF (EQU==5) THEN
U_P_MAX = -
0.214362789151+1.35034249993*LOG10(Z_BLAST1)
POLY_P_MAX = (/2.780769, -1.6958988, -0.1541937,
0.514050,
> 0.0988534, -0.2939126, -0.02681123,
0.109097,0.001628467,
> -0.0214631, 0.0001456723, 0.001678477/)
END IF
*--------------------------------------------------------------------
* kingery calculation
DO I = 1, 12
P_MAX1 = P_MAX1 +
POLY_P_MAX(I)*U_P_MAX**(I-1)
END DO
P_MAX= 1D3 * 10 ** P_MAX1
DO I = 1, 9
T_D1 = T_D1 + POLY_T_D(I)*U_T_D**(I-1)
END DO
T_D= (1D-3 * 10 ** T_D1)*CHARGE**(1./3.)
ELSE !Z>40
SELECT CASE (EQU)
CASE (1) !KINGERY SPHERICAL REFLECTED
P_MAX = 10 ** (-1.147D0 * LOG10(Z_BLAST1) +
5.375D0)
CASE (2) !KINGERY SPHERICAL, INCIDENT
P_MAX = 10 ** (-1.1D0 * LOG10(Z_BLAST1) + 5.D0)
CASE (4) !KINGERY HEMISPHERICAL, REFLECTED
Z_BLAST1 = D/(CHARGE*1.8)**0.333333D0
P_MAX = 10 ** (-1.147D0 * LOG10(Z_BLAST1) +
5.375D0)
CASE(5) !KINGERY HEMISPHERICAL, INCIDENT
Z_BLAST1 = D/(CHARGE*1.8)**0.333333D0
P_MAX = 10 ** (-1.1D0 * LOG10(Z_BLAST1) + 5.D0)
END SELECT
T_D = 10 ** (0.23D0 * LOG10(Z_BLAST1) - 2.594D0)
END IF !Z>40
*
END SUBROUTINE AIRB_PARAMETER
*=============================================
SUBROUTINE TARRIVE_AIRB (MASS, D,
COND,T_ARR)
* ------------------------------------------------------------------
* arrival time air blast m.larcher 02-08
* ------------------------------------------------------------------
* mass = mass of explosive charge (in kg)
* cond = choose of different explosion models
* 1 = unconfined (kingery)
27
* 2 = half-confined (kingery)
* d = distance between charge and clxx element centroid
* t_arr = arrival time of the explosion (output)
*
IMPLICIT NONE
*
*--- variables globales
REAL(8), INTENT(IN) :: MASS,D
INTEGER, INTENT(IN) :: COND
REAL(8), INTENT(OUT) :: T_ARR
*--- variables locales
REAL(8) :: T_START, Z_BLAST, Z_BLAST1,
Y_CONWEP, U_T_START, D_40
REAL(8), DIMENSION(10) :: POLY_T_START
INTEGER :: I
*----- air blast pressure
*----- parameters of detonation for all models
Z_BLAST = D/MASS**0.333333D0
*----- z bigger than 40 --> sound speed is used from the distance
z=40 on
IF (Z_BLAST > 40.D0) THEN
Z_BLAST1 = 40
ELSE
Z_BLAST1 = Z_BLAST
END IF
*----- time of explosion-------------------------------------------
*----- conwep is used for all models with different parameters
IF(COND==1) THEN
POLY_T_START = (/0.07207,1.36456,-0.057003,-
0.18283,0.011885,
> 0.043265, -0.000799736, -0.00436073, 0.0, 0.0/)
U_T_START = -0.25327+1.37407*LOG10(Z_BLAST1)
ELSE
POLY_T_START = (/-0.059163, 1.357064, 0.052492, -
0.19656395,
> -0.06017700, 0.0696360, 0.0215297, -0.01616589, -
0.0023253,
> 0.00147752/)
U_T_START = -0.2024257+1.37784*LOG10(Z_BLAST1)
END IF
Y_CONWEP = 0.0
DO I = 1, 10
Y_CONWEP = Y_CONWEP +
POLY_T_START(I)*U_T_START**(I-1)
END DO
T_ARR = (1D-3 * 10 ** Y_CONWEP)*MASS**(1./3.)
IF (Z_BLAST > 40.D0) THEN
D_40 = 40.D0 * MASS**0.333333D0
T_ARR = T_ARR + (D-D_40)/343.D0
END IF
*
END SUBROUTINE TARRIVE_AIRB
*============================================
END MODULE M_MATERIAL_I_AIRB
7.2 AIRB Program
airb.f
PROGRAMM AIRB
*--- variables locales
REAL(8) :: T_START ,T_D , T_NEG, T, P_MAX,
B_BLAST , Z_BLAST, D,
> P_MAX1, P_NEG, CHARGE,Z_BLAST1, I_POS, INCR,
I_POS1, TB, TE, TS,
> DB, DE, DS
INTEGER :: I, COND, EQU, FUNC, SUB_FUNC,
FILE_NUMBER
CHARACTER(255) :: FILE_NAME
*
WRITE (*,*) " "
WRITE (*,*) " AA I RRRRR BBBBB"
WRITE (*,*) " A A R R B B"
WRITE (*,*) " A A I R R B B"
WRITE (*,*) " A A I RRRRRR BBBBB"
WRITE (*,*) " AAAAAAAAAA I R RR B B"
WRITE (*,*) " A A I R RR B B"
WRITE (*,*) "A A I R RR BBBBB"
WRITE (*,*) " "
WRITE (*,*) "Air Blast Functions for EUROPLEXUS and
more..."
WRITE (*,*) " "
WRITE (*,*) "Details of the program are described in the"
WRITE (*,*) "Technical Note 'Pressure-Time Functions for
the"
WRITE (*,*) "Description of Air Blast Waves' (Martin
Larcher)"
WRITE (*,*) "PUBSY JRC 46829, 2008"
WRITE (*,*) " "
P = 0.D0 ! INITIALIZATION
WRITE (*,*) "FUNCTION: 1 Main values"
WRITE (*,*) " 2 Function of distance (main values)"
WRITE (*,*) " 3 Pressure-time curve (distance fix)"
WRITE (*,*) " 4 Pressure-distance curve (time fix)"
WRITE (*,*) " 5 Given: P_MAX --> Z_BLAST"
WRITE (*,*) " 6 Given: P_MAX, I_POS -->
D,CHARGE"
WRITE (*,*) " 0 Stop"
READ (*,*) FUNC
IF(FUNC==0) STOP
WRITE (*,*) "Write to a file. 0 for screen output."
WRITE (*,*) "FILENAME: "
READ (*,*) FILE_NAME
IF(FILE_NAME=="0") THEN
FILE_NUMBER = 6
ELSE
FILE_NUMBER = 1
OPEN(1,FILE=FILE_NAME)
ENDIF
WRITE (*,*) "EQUATION: 1 Kingery spherical reflected"
WRITE (*,*) " 2 Kingery spherical, incident"
WRITE (*,*) " 3 Kinney spherical, incident"
WRITE (*,*) " 4 Kingery hemispherical, reflected"
WRITE (*,*) " 5 Kingery hemispherical, incident"
READ (*,*) EQU
*----- air blast pressure
*----- parameters of detonation for all models
SELECT CASE (FUNC)
CASE (1)
WRITE (*,1101, ADVANCE='NO')
READ (*,*) CHARGE
WRITE (*,1105, ADVANCE='NO')
READ (*,*) D
Z_BLAST = D/CHARGE**0.333333D0
CALL AIRB_PARAMETER (EQU, CHARGE, D,
P_MAX, T_START, T_D,
> P_NEG, T_NEG, B_BLAST)
CALL AIRB_IMPULSE (EQU, CHARGE, D, I_POS)
WRITE(FILE_NUMBER,1001)
"Z_BLAST","P_MAX","T_START","T_D",
> "P_NEG", "T_NEG", "B_BLAST","I_POS"
28
WRITE(FILE_NUMBER,1002)
Z_BLAST,P_MAX,T_START,T_D,P_NEG,T_NEG,
> B_BLAST, I_POS
CASE (2)
WRITE (*,*) "Parameter over Distance"
WRITE (*,*) " 1 Peak pressure (P_MAX)"
WRITE (*,*) " 2 Arrival time (T_START)"
WRITE (*,*) " 3 Time of duration (positive) (T_D)"
WRITE (*,*) " 4 Minimum pressure (P_NEG)"
WRITE (*,*) " 5 Time of duration (negative) (T_NEG)"
WRITE (*,*) " 6 Form Parameter (B_BLAST)"
WRITE (*,*) " 7 Impulse (I_POS)"
READ (*,*) SUB_FUNC
WRITE (*,1101, ADVANCE='NO')
READ (*,*) CHARGE
WRITE (*,1110, ADVANCE='NO')
READ (*,*) DB
WRITE (*,1111, ADVANCE='NO')
READ (*,*) DE
WRITE (*,1112, ADVANCE='NO')
READ (*,*) DS
SELECT CASE (SUB_FUNC)
CASE (1)
WRITE(FILE_NUMBER,1003)
"D","Z_BLAST","P_MAX"
CASE (2)
WRITE(FILE_NUMBER,1003)
"D","Z_BLAST","T_START"
CASE (3)
WRITE(FILE_NUMBER,1003) "D","Z_BLAST","T_D"
CASE (4)
WRITE(FILE_NUMBER,1003)
"D","Z_BLAST","P_NEG"
CASE (5)
WRITE(FILE_NUMBER,1003)
"D","Z_BLAST","T_NEG"
CASE (6)
WRITE(FILE_NUMBER,1003)
"D","Z_BLAST","B_BLAST"
CASE (7)
WRITE(FILE_NUMBER,1003)
"D","Z_BLAST","I_POS"
END SELECT
DO D = DB, DE, DS
Z_BLAST = D/CHARGE**0.333333D0
CALL AIRB_PARAMETER (EQU, CHARGE, D,
P_MAX, T_START, T_D,
> P_NEG, T_NEG, B_BLAST)
CALL AIRB_IMPULSE (EQU, CHARGE, D, I_POS)
SELECT CASE (SUB_FUNC)
CASE (1)
WRITE(FILE_NUMBER,1004) D,Z_BLAST,P_MAX
CASE (2)
WRITE(FILE_NUMBER,1004) D,Z_BLAST,T_START
CASE (3)
WRITE(FILE_NUMBER,1004) D,Z_BLAST,T_D
CASE (4)
WRITE(FILE_NUMBER,1004) D,Z_BLAST,P_NEG
CASE (5)
WRITE(FILE_NUMBER,1004) D,Z_BLAST,T_NEG
CASE (6)
WRITE(FILE_NUMBER,1004)
D,Z_BLAST,B_BLAST
CASE (7)
WRITE(FILE_NUMBER,1004) D,Z_BLAST,I_POS
END SELECT
END DO
CASE (3)
WRITE (*,1101, ADVANCE='NO')
READ (*,*) CHARGE
WRITE (*,1105, ADVANCE='NO')
READ (*,*) D
Z_BLAST = D/CHARGE**0.333333D0
CALL AIRB_PARAMETER (EQU, CHARGE, D,
P_MAX, T_START, T_D,
> P_NEG, T_NEG, B_BLAST)
WRITE(*,*) "The arrival time is : ", T_START
WRITE (*,1107, ADVANCE='NO')
READ (*,*) TB
WRITE (*,1108, ADVANCE='NO')
READ (*,*) TE
WRITE (*,1109, ADVANCE='NO')
READ (*,*) TS
WRITE(FILE_NUMBER,1003) "T","T_CURR","P"
DO T = TB, TE, TS
T_CURR = T-T_START
P = P_MAX*(1.D0-T_CURR/T_D)*EXP(-
B_BLAST*T_CURR/T_D)
IF (T_CURR>T_D . AND . T_CURR<=T_D+T_NEG/2.)
THEN
! NEGATIVE PHASE
P = 2.*P_NEG/T_NEG*(T_D-T_CURR)
ELSE IF (T_CURR>T_D+T_NEG/2. . AND .
T_CURR<=T_D+T_NEG)THEN
! NEGATIVE PHASE
P = 2.*P_NEG/T_NEG*(T_CURR-T_D-T_NEG)
ELSE IF (T_CURR>T_D+T_NEG) THEN
P=0.D0 ! AFTER LOADING
END IF
IF (T_CURR<0) P=0.D0 !IF TIME STEP BEFORE AIRB
IF(P<-1D5)P=-1D5
WRITE(FILE_NUMBER,1004) T,T_CURR,P
END DO
CASE (4)
WRITE (*,1101, ADVANCE='NO')
READ (*,*) CHARGE
WRITE (*,1102, ADVANCE='NO')
READ (*,*) T
WRITE (*,1110, ADVANCE='NO')
READ (*,*) DB
WRITE (*,1111, ADVANCE='NO')
READ (*,*) DE
WRITE (*,1112, ADVANCE='NO')
READ (*,*) DS
WRITE(FILE_NUMBER,1003) "D","Z_BLAST","P"
DO D = DB, DE, DS
Z_BLAST = D/CHARGE**0.333333D0
CALL AIRB_PARAMETER (EQU, CHARGE, D,
P_MAX, T_START, T_D,
> P_NEG, T_NEG, B_BLAST)
T_CURR = T-T_START
P = P_MAX*(1.D0-T_CURR/T_D)*EXP(-
B_BLAST*T_CURR/T_D)
IF (T_CURR>T_D . AND . T_CURR<=T_D+T_NEG/2.)
THEN
! NEGATIVE PHASE
P = 2.*P_NEG/T_NEG*(T_D-T_CURR)
ELSE IF (T_CURR>T_D+T_NEG/2. . AND .
T_CURR<=T_D+T_NEG)THEN
! NEGATIVE PHASE
P = 2.*P_NEG/T_NEG*(T_CURR-T_D-T_NEG)
ELSE IF (T_CURR>T_D+T_NEG) THEN
P=0.D0 ! AFTER LOADING
END IF
IF (T_CURR<0) P=0.D0 !IF TIME STEP BEFORE AIRB
IF(P<-1D5)P=-1D5
29
WRITE(FILE_NUMBER,1004) D,Z_BLAST,P
END DO
CASE (5)
WRITE (*,1103, ADVANCE='NO')
READ (*,*) P_MAX1
CALL GET_Z (EQU, P_MAX1, Z_BLAST)
WRITE(FILE_NUMBER,*) "Z_BLAST = ", Z_BLAST
CASE (6)
WRITE (*,1103, ADVANCE='NO')
READ (*,*) P_MAX1
WRITE (*,1104, ADVANCE='NO')
READ (*,*) I_POS1
CALL GET_Z (EQU, P_MAX1, Z_BLAST)
INCR = 1.D0
D = 0.1D0
DO WHILE (INCR>0.001)
CHARGE = (D/Z_BLAST)**3.D0
CALL AIRB_IMPULSE (EQU, CHARGE, D, I_POS)
IF(I_POS1 <I_POS) THEN
INCR = INCR /2.D0
D = D - INCR
ELSE
D = D + INCR
ENDIF
END DO
CHARGE = (D/Z_BLAST)**3.D0
WRITE(FILE_NUMBER,*) "Z_BLAST = ", Z_BLAST
WRITE(FILE_NUMBER,*) "D = ", D
WRITE(FILE_NUMBER,*) "CHARGE = ", CHARGE
CALL AIRB_PARAMETER (EQU, CHARGE, D,
P_MAX, T_START, T_D,
> P_NEG, T_NEG, B_BLAST)
WRITE(FILE_NUMBER,1001)
"Z_BLAST","P_MAX","T_START","T_D",
> "P_NEG","T_NEG", "B_BLAST","I_POS"
WRITE(FILE_NUMBER,1002)
Z_BLAST,P_MAX,T_START,T_D,P_NEG,
> T_NEG,B_BLAST, I_POS
END SELECT
IF(FILE_NUMBER==1) CLOSE(1)
*--------------------------------------------------------------------
1001 FORMAT (8A12)
1002 FORMAT (8E12.4)
1003 FORMAT (3A12)
1004 FORMAT (3E12.4)
1101 FORMAT (1X, 'CHARGE (kg) : ')
1102 FORMAT (1X, 'TIME (s) : ')
1103 FORMAT (1X, 'P_MAX (Pa) : ')
1104 FORMAT (1X, 'I_POS (Pa s) : ')
1105 FORMAT (1X, 'DISTANCE (m) : ')
1107 FORMAT (1X, 'FIRST TIME STEP : ')
1108 FORMAT (1X, 'LAST TIME STEP : ')
1109 FORMAT (1X, 'TIME STEP SIZE : ')
1110 FORMAT (1X, 'MINIMUM DISTANCE : ')
1111 FORMAT (1X, 'MAXIMUM DISTANCE : ')
1112 FORMAT (1X, 'DISTANCE STEPS : ')
END PROGRAMM AIRB
*=============================================
SUBROUTINE TARRIVE_AIRB (MASS, D,
COND,T_ARR)
See m_material_i_airb.ff
*=============================================
SUBROUTINE AIRB_PARAMETER (EQU, CHARGE, D,
P_MAX, T_START, T_D,
> P_NEG, T_NEG, B_BLAST)
See m_material_i_airb.ff
*=============================================
SUBROUTINE AIRB_IMPULSE (EQU, CHARGE, D,
I_POS)
* ------------------------------------------------------------------
* cond. aux limites air blast m.larcher 07-08
* separet file - not used in EUROPLEXUS
* ------------------------------------------------------------------
* charge = mass of explosive charge (in kg)
* equ = choose of different explosion models
* 1 = unconfined (full space), reflected (kingery)
* 2 = unconfined (full space), not reflected (kingery)
* 4 = half-confined (half space), reflected (kingery)
* 5 = half-confined (half space), not reflected (kingery)
* d : distance between charge and clxx element centroid
* i_pos: positive impulse
*
IMPLICIT NONE
*
*--- variables globales
REAL(8), INTENT(IN) :: D, CHARGE
INTEGER, INTENT(IN) :: EQU
REAL(8), INTENT(OUT) :: I_POS
*--- variables locales
REAL(8) :: Z_BLAST, U_I_P,I_P1
REAL(8), DIMENSION(9) :: POLY_I_P
INTEGER :: I
*
*----- air blast pressure
*----- parameters of detonation for all models
Z_BLAST = D/CHARGE**0.333333D0
*----- conwep is used for all models with different parameters
*begin different models
I_P1=0.0
SELECT CASE(EQU)
CASE (1) !refleced spherical
U_I_P = -
0.204004553231+1.37882996018*LOG10(Z_BLAST)
POLY_I_P = (/2.55875660396,-
0.903118886091,0.101771877942,
> -0.0242139751146,0.0,0.0,0.0,0.0,0.0/)
CASE (2) !incident spherical
IF(Z_BLAST<0.792) THEN
U_I_P =
2.34723921354+3.24299066475*LOG10(Z_BLAST)
POLY_I_P = (/2.38630516757,-
0.443749377691,0.168825414684,
> 0.0348138030308,-0.010435192824,0.0,0.0,0.0,0.0/)
ELSE
U_I_P = -
1.75305660315+2.30629231803*LOG10(Z_BLAST)
POLY_I_P = (/1.55197227115,-0.40463292088,-
0.0142721946082,
> 0.00912366316617,-0.0006750681404,-
0.00800863718901,
> 0.00314819515931,0.00152044783382,-
0.0007470265099/)
END IF
CASE (4) !reflected hemispheical
U_I_P = -
0.246208804814+1.33422049854*LOG10(Z_BLAST)
POLY_I_P = (/2.70588058103,-
0.949516092853,0.112136118689,
> -0.0250659183287,0.0,0.0,0.0,0.0,0.0/)
CASE (5) !incident hemispheical
IF(Z_BLAST<0.955) THEN
30
U_I_P =
2.06761908721+3.0760329666*LOG10(Z_BLAST)
POLY_I_P = (/2.52455620925,-
0.52992763686,0.171335645235,
> 0.0450176963051,-0.0118964626402,0.0,0.0,0.0,0.0/)
ELSE
U_I_P = -
1.94708846747+2.40697745406*LOG10(Z_BLAST)
POLY_I_P = (/1.67231645863,-0.384519026965,-
0.0260816706301,
> 0.00595798753822,0.014544526107,-
0.00663289334734,
> -0.00284189327204,0.0013644816227,0.0/)
END IF
CASE DEFAULT
WRITE(*,*) "IMPUSLSE NOT YET DEFINED"
END SELECT
*--------------------------------------------------------------------
* kingery calculation
DO I = 1, 9
I_P1 = I_P1 + POLY_I_P(I)*U_I_P**(I-1)
END DO
I_POS= (CHARGE**0.33333333)* 10 ** I_P1
*
END SUBROUTINE AIRB_IMPULSE
*============================================
SUBROUTINE GET_Z (EQU, P_MAX1, Z_BLAST)
* ------------------------------------------------------------------
* returns Z for a given p_max
* ------------------------------------------------------------------
* equ = choose of different explosion models
* 1 = unconfined (full space), reflected (kingery)
* 2 = unconfined (full space), not reflected (kingery)
* 4 = half-confined (half space), reflected (kingery)
* 5 = half-confined (half space), not reflected (kingery)
* p_max1: given p_max
*
IMPLICIT NONE
*
*--- variables globales
REAL(8), INTENT(IN) :: P_MAX1
INTEGER, INTENT(IN) :: EQU
REAL(8), INTENT(OUT) :: Z_BLAST
*--- variables locales
REAL(8) :: INCR, CHARGE, P_MAX, D, T_START, T_D,
P_NEG,
> T_NEG, B_BLAST
*
INCR = 1.D0
Z_BLAST = 1.D0
D = 1.D0
DO WHILE (INCR>0.001)
CHARGE = (D/Z_BLAST)**3.D0
CALL AIRB_PARAMETER (EQU, CHARGE, D,
P_MAX, T_START, T_D,
> P_NEG, T_NEG, B_BLAST)
IF(P_MAX1 >P_MAX) THEN
INCR = INCR /2.D0
Z_BLAST = Z_BLAST - INCR
ELSE
Z_BLAST = Z_BLAST + INCR
ENDIF
END DO
END SUBROUTINE GET_Z
*============================================
31
European Commission
Joint Research Centre Institute for the Protection and Security of the Citizen
Title: Pressure-Time Functions for the Description of Air Blast Waves
Author: Martin Larcher
2008 33 pp. 21.0 x 29.7 cm
Abstract
This work is being conducted in the framework of the project RAILPROTECT, which deals with the security and
safety of rail transport against terrorist attacks. The bombing threat is only considered, and focus is placed on
predicting the effects of explosions in railway and metro stations and rolling stock and on assessing the
vulnerability of such structures.
The project is based on numerical simulations, which are carried out with the explicit Finite Element Code
EUROPLEXUS that is written for the calculation of fast dynamic fluid-structure interactions. This code has been
developed in a collaboration of the French Commissariat l'Energie Atomique (CEN Saclay) and the Joint
Research Centre of the European Commission (JRC Ispra).
There are several possibilities to simulate explosions, e.g., in trains and stations. The fasted one is to neglect
the influence of the air and to use only the structural part of the geometry. Then, the behaviour of the explosion
can be simulated by using a pressure-time function, which can be applied on the structure. This technical note
presents the pressure-time functions, which are implemented in EUROPLEXUS. In addition to this
implementation, an external routine is developed, which allows the calculation of several values of the pressure-
time function. This program allows also to calculate, e.g., the charge by a given peak pressure and positive
impulse, which is helpful by fitting experiments to a pressure-time function.
32
The mission of the JRC is to provide customer-driven scientific and technical support
for the conception, development, implementation and monitoring of EU policies. As a
service of the European Commission, the JRC functions as a reference centre of
science and technology for the Union. Close to the policy-making process, it serves
the common interest of the Member States, while being independent of special
interests, whether private or national.