42 SUBROUTINE pblast_1(PBLAST ,ILOADP ,FAC ,A ,V ,X ,
43 1 IADC ,FSKY ,LLOADP ,FEXT ,NODA_SURF ,NODA_PEXT,
44 2 ITAB ,H3D_DATA ,NL ,DTMIN_LOC ,WFEXT_LOC ,
56 USE output_mod ,
ONLY : h3d_has_noda_pext, anim_has_noda_pext
60#include "implicit_f.inc"
74#include "tabsiz_c.inc"
78 INTEGER,
INTENT(IN) :: LLOADP(SLLOADP)
79 INTEGER,
INTENT(INOUT) :: ILOADP(SIZLOADP,NLOADP)
80 INTEGER,
INTENT(IN) :: IADC(*)
81 INTEGER,
INTENT(IN) :: ITAB(NUMNOD),NL
82 my_real,
INTENT(INOUT) :: dtmin_loc
83 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT_LOC
84 my_real,
INTENT(IN) :: v(3,numnod),x(3,numnod)
85 my_real,
INTENT(INOUT) :: fac(lfacload,nloadp)
86 my_real,
INTENT(INOUT) :: a(3,numnod),fsky(8,sfsky/8)
87 my_real,
INTENT(INOUT) :: fext(3,numnod)
88 my_real,
INTENT(INOUT) :: noda_surf(numnod)
89 my_real,
INTENT(INOUT) :: noda_pext(numnod)
91 TYPE (TH_SURF_) ,
INTENT(INOUT) :: TH_SURF
92 INTEGER,
INTENT(INOUT) :: NSEGPL
93 TYPE(friedlander_params_) ::
94 TYPE(pblast_) :: PBLAST
98 INTEGER :: N1, N2, N3, N4,IL,IS,IAD,I,IANIM_OR_H3D,IZ_UPDATE,,ISIZ_SEG,,
99 . ID, ITA_SHIFT,IMODEL,NN(4),NS,KSURF,NDT
103 . cos_theta, alpha_inci, alpha_refl, p_inci, p_refl_,p_inci_, p_refl,z,
104 . i_inci,i_refl,i_inci_,i_refl_, dt_0, t_a,dt_0_,
105 . wave_refl,wave_inci, w13,
106 . dnorm, xdet,ydet,zdet,tdet,wtnt,pmin,t_stop,dx,dy,dz,p,
107 . fac_m_bb, fac_l_bb, fac_t_bb, fac_p_bb, fac_i_bb, ta_first, tt_star, z1_,
108 . decay_inci,decay_refl,zeta,
109 . cst_255_div_ln_z1_on_zn, log10_, npt, ff(3), ta_inf_loc,
112 INTEGER,
EXTERNAL :: OMP_GET_THREAD_NUM
114 LOGICAL,
SAVE :: IS_UPDATED
115 LOGICAL :: IS_DECAY_TO_BE_COMPUTED
117 CHARACTER(LEN=NCHARLINE) :: MSGOUT1,MSGOUT2
119 DATA cst_255_div_ln_z1_on_zn/-38.147316611455952998/
120 DATA log10_ /2.30258509299405000000/
136 IF(pblast%NLOADP_B==0)
RETURN
139 ta_first = fac(07,nl)
141 tt_star = tt + pblast%PBLAST_DT%TA_INF
142 iz_update = iloadp(06,nl)
144 ta_first = fac(07,nl) + pblast%PBLAST_DT%TA_INF
145 IF(iz_update ==1)
THEN
147 dtmin_loc = (one+em06)*(ta_first - tt)
148 dtmin_loc=
max(pblast%PBLAST_TAB(il)%DTMIN, dtmin_loc)
149 IF(tt_star<ta_first)
RETURN
152 dtmin_loc = (one+em06)*(tdet - tt)
153 dtmin_loc=
max(pblast%PBLAST_TAB(il)%DTMIN, dtmin_loc)
155 dtmin_loc = pblast%PBLAST_TAB(il)%DTMIN
157 IF(tt_star<tdet)
RETURN
162 ianim_or_h3d = anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT + anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT
168 fac_m_bb = fac_mass*ep03
169 fac_l_bb = fac_length*ep02
170 fac_t_bb = fac_time*ep06
171 fac_p_bb = fac_m_bb/fac_l_bb/fac_t_bb/fac_t_bb
172 fac_i_bb = fac_p_bb*fac_t_bb
173 fac_i_bb = fac_m_bb/fac_l_bb/fac_t_bb
188 ta_first = fac(07,nl)
191 iz_update = iloadp(06,nl)
192 abac_id = iloadp(07,nl)
197 isiz_seg = iloadp(01,nl)/4
199 w13 = (wtnt*fac_m_bb)**third
203 is_decay_to_be_computed = .false.
204 IF(imodel == 2)is_decay_to_be_computed=.true.
213 n1=lloadp(iloadp(4,nl)+4*(i-1))
214 n2=lloadp(iloadp(4,nl)+4*(i-1)+1)
215 n3=lloadp(iloadp(4,nl)+4*(i-1)+2)
216 n4=lloadp(iloadp(4,nl)+4*(i-1)+3)
222 IF(n4==0 .OR. n3==n4 )
THEN
224 pblast%PBLAST_TAB(il)%NPt(i) = three
227 zx = x(1,n1)+x(1,n2)+x(1,n3)
228 zy = x(2,n1)+x(2,n2)+x(2,n3)
229 zz = x(3,n1)+x(3,n2)+x(3,n3)
234 nx = (x(2,n3)-x(2,n1))*(x(3,n3)-x(3,n2)) - (x(3,n3)-x(3,n1))*(x(2,n3)-x(2,n2))
235 ny = (x(3,n3)-x(3,n1))*(x(1,n3)-x(1,n2)) - (x(1,n3)-x(1,n1))*(x(3,n3)-x(3,n2))
236 nz = (x(1,n3)-x(1,n1))*(x(2,n3)-x(2,n2)) - (x(2,n3)-x(2,n1))*(x(1,n3)-x(1,n2))
238 norm = sqrt(nx*nx+ny*ny+nz*nz)
241 pblast%PBLAST_TAB(il)%NPt(i) = four
244 zx = x(1,n1)+x(1,n2)+x(1,n3)+x(1,n4)
245 zy = x(2,n1)+x(2,n2)+x(2,n3)+x(2,n4)
246 zz = x(3,n1)+x(3,n2)+x(3,n3)+x(3,n4)
251 nx = (x(2,n3)-x(2,n1))*(x(3,n4)-x
252 ny = (x(3,n3)-x(3,n1))*(x(1,n4)-x(1,n2)) - (x(1,n3
253 nz = (x(1,n3)-x(1,n1))*(x(2,n4)-x(2,n2
255 norm = sqrt(nx*nx+ny*ny+nz*nz)
258 pblast%PBLAST_TAB(il)%N(1,i) = n1
259 pblast%PBLAST_TAB(il)%N(2,i) = n2
260 pblast%PBLAST_TAB(il)%N(3,i) = n3
269 IF(iz_update == 2)
THEN
274 dx = (xdet - zx)*fac_l_bb
275 dy = (ydet - zy)*fac_l_bb
276 dz = (zdet - zz)*fac_l_bb
277 dnorm = sqrt(dx*dx+dy*dy+dz*dz)
280 cos_theta = dx*nx + dy*ny + dz*nz
281 cos_theta = cos_theta/
max(em20,
norm*dnorm)
287 IF(z <= 0.5 .AND. pblast%PBLAST_TAB(il)%TAGMSG(i) == 0 )
THEN
288 write(iout, fmt=
'(A,I0,A)')
"Warning : /LOAD/PBLAST id=",id,
" R/W**(1/3) < 0.5 cm/g**(1/3)"
289 write(istdo,fmt=
'(A,I0,A)')
"Warning : /LOAD/PBLAST id=",id,
" R/W**(1/3) < 0.5 cm/g**(1/3)"
290 write(iout, fmt=
'(A)')
" Radial Distance R too close to the charge"
291 write(istdo,fmt=
'(A)')
" Radial Distance R too close to the charge"
293 if (n4 == 0 .OR. n3 == n4)
then
294 write(iout, fmt='(a,3i11)
') " -> Segment nodes : ", itab(n1),itab(n2),itab(n3)
295 write(istdo,fmt='(a,3i11)
') " -> Segment nodes : ", itab(n1),itab(n2),itab(n3)
297 write(iout, fmt='') " -> Segment nodes : ", itab(n1),itab(n2),itab(n3),itab(n4)
298 write(istdo,fmt='(a,4i11)
') " -> Segment nodes : ", itab(n1),itab(n2),itab(n3),itab(n4)
300 PBLAST%PBLAST_TAB(IL)%TAGMSG(I) = 1
302 ELSEIF(Z > 400. AND. PBLAST%PBLAST_TAB(IL)%TAGMSG(I) == 0)THEN
303 write(iout, fmt='(a,i0,a)
') "Warning : /LOAD/PBLAST id=",ID," R/W**(1/3) > 400. cm/g**(1/3)"
304 write(istdo,fmt='(a,i0,a)
') "Warning : /LOAD/PBLAST id=",ID," R/W**(1/3) > 400. cm/g**(1/3)"
305 WRITE(iout, FMT='(a)
') " Radial Distance R too far from the charge"
306 WRITE(istdo,FMT='(a
') " Radial Distance R too far from the charge"
307.OR.
if (N4 == 0 N3 == N4)then
308 write(iout, fmt='(a,3i11)
') " -> Segment nodes : ", itab(n1),itab(n2),itab(n3)
309 write(istdo,fmt='(a,3i11)
') " -> Segment nodes : ", itab(n1),itab(n2),itab(n3)
311 write(iout, fmt='(a,4i11)
') " -> Segment nodes : ", itab(n1),itab(n2),itab(n3),itab(n4)
312 write(istdo,fmt='(a,4i11)
') " -> Segment nodes : ", itab(n1),itab(n2),itab(n3),itab(n4)
314 PBLAST%PBLAST_TAB(IL)%TAGMSG(I) = 1
317 !------------------------------------------------------------------!
318 CALL PBLAST_PARAMETERS__FREE_AIR(PBLAST,Z, W13, TDET,
319 + FAC_P_bb, FAC_I_bb, FAC_T_bb,
320 + IS_DECAY_TO_BE_COMPUTED,
321 + FRIEDLANDER_PARAMS,NWARN)
323 P_inci = FRIEDLANDER_PARAMS%P_inci
324 P_inci_ = FRIEDLANDER_PARAMS%P_inci_
325 P_refl = FRIEDLANDER_PARAMS%P_refl
326 P_refl_ = FRIEDLANDER_PARAMS%P_refl_
327 I_inci = FRIEDLANDER_PARAMS%I_inci
328 I_inci_ = FRIEDLANDER_PARAMS%I_inci_
329 I_refl = FRIEDLANDER_PARAMS%I_refl
330 I_refl_ = FRIEDLANDER_PARAMS%I_refl_
331 T_A = FRIEDLANDER_PARAMS%T_A
332 DT_0 = FRIEDLANDER_PARAMS%DT_0
333 DT_0_ = FRIEDLANDER_PARAMS%DT_0_
334 decay_inci = FRIEDLANDER_PARAMS%decay_inci
335 decay_refl = FRIEDLANDER_PARAMS%decay_refl
336 !------------------------------------------------------------------!
338 TA_INF_LOC = MIN(TA_INF_LOC, T_A)
340 !update wave parameters
341 PBLAST%PBLAST_TAB(IL)%cos_theta(I) = cos_theta
342 PBLAST%PBLAST_TAB(IL)%P_inci(I) = P_inci
343 PBLAST%PBLAST_TAB(IL)%P_refl(I) = P_refl
344 PBLAST%PBLAST_TAB(IL)%ta(I) = T_A
345 PBLAST%PBLAST_TAB(IL)%t0(I) = DT_0
346 PBLAST%PBLAST_TAB(IL)%decay_inci(I) = decay_inci
347 PBLAST%PBLAST_TAB(IL)%decay_refl(I) = decay_refl
349 DTMIN_LOC = MIN(DTMIN_LOC,DT_0/NDT)
354 !use wave parameters from Starter
356 cos_theta = PBLAST%PBLAST_TAB(IL)%cos_theta(I)
357 P_inci = PBLAST%PBLAST_TAB(IL)%P_inci(I)
358 P_refl = PBLAST%PBLAST_TAB(IL)%P_refl(I)
359 T_A = PBLAST%PBLAST_TAB(IL)%ta(I)
360 DT_0 = PBLAST%PBLAST_TAB(IL)%t0(I)
361 decay_inci = PBLAST%PBLAST_TAB(IL)%decay_inci(I)
362 decay_refl = PBLAST%PBLAST_TAB(IL)%decay_refl(I)
363 DTMIN_LOC = PBLAST%PBLAST_TAB(IL)%DTMIN
365 ENDIF !IF(IZ_UPDATE == 2)
367 !Coefficients for wave superimposition
368 !PressureLoad = Reflected_Pressure * cos2X + IncidentPressure * (1 + cos2X -2 cosX)
369 IF(cos_theta<=ZERO)THEN
370 !Surface not facing the point of explosion
374 alpha_refl = cos_theta**2 ! cos**2 a
375 alpha_inci = ONE + cos_theta - TWO * alpha_refl ! 1 + cos a -2 cos**2 a
378 !Building pressure waves from Friedlander model. (Modified model can bu introduced later if needed)
382 WAVE_INCI = P_inci*(ONE-(TT_STAR-T_A)/DT_0)*exp(-DECAY_inci*(TT_STAR-T_A)/DT_0)
383 WAVE_REFL = P_refl*(ONE-(TT_STAR-T_A)/DT_0)*exp(-DECAY_refl*(TT_STAR-T_A)/DT_0)
388 P = alpha_refl * WAVE_REFL + alpha_inci * WAVE_INCI
390 PBLAST%PBLAST_TAB(IL)%PRES(I) = P
392 !!Expand Pressure load to nodes
393 ! FF is nodal force which applied on each node N1,N2,N3, and also N4 if relevant
394 ! FF = FF_elem / NPT = Pload.S.n / NPT where n is the unitary normal vector
395 ! NX,NY,NZ = 2S.n (in all cases:quadrangles & triangles)
396 SURF_PATCH = HALF*SQRT(NX*NX+NY*NY+NZ*NZ) / NPT
397 FF(1) = -P * HALF*NX / NPT ! -P*S/NPT . nx
398 FF(2) = -P * HALF*NY / NPT ! -P*S/NPT . ny
399 FF(3) = -P * HALF*NZ / NPT ! -P*S/NPT . nz
400 !storing force for one node of the current face (for assembly below)
401 PBLAST%PBLAST_TAB(IL)%FX(I) = FF(1)
402 PBLAST%PBLAST_TAB(IL)%FY(I) = FF(2)
403 PBLAST%PBLAST_TAB(IL)%FZ(I) = FF(3)
404 PBLAST%PBLAST_TAB(IL)%SURF_PATCH(I) = SURF_PATCH
407 ! on a given node : DW = <F,V>*dt
408 ! for this current 4-node or 3-node face : DW = sum( <F_k,V_k>*dt k=1,NPT) where F_k=Fel/NPT
409 WFEXT_LOC=WFEXT_LOC+DT1*(FF(1)*SUM(V(1,NN(1:NINT(NPT)))) +FF(2)*SUM(V(2,NN(1:NINT(NPT)))) +FF(3)*SUM(V(3,NN(1:NINT(NPT)))))
412 IF(TH_SURF%LOADP_FLAG > 0 ) THEN
414 AREA = SURF_PATCH * NPT
415 DO NS=TH_SURF%LOADP_KSEGS(NSEGPL) +1,TH_SURF%LOADP_KSEGS(NSEGPL+1)
416 KSURF = TH_SURF%LOADP_SEGS(NS)
417 th_surf%channels(4,KSURF)= th_surf%channels(4,KSURF) + AREA*P ! mean pressure
418 th_surf%channels(5,KSURF)= th_surf%channels(5,KSURF) + AREA ! suface where pressure is applied
425.AND.
IF(IMODEL == 2 NWARN > 0)THEN
427 WRITE(MSGOUT1,FMT='(i0,a)
') NWARN,
428 . ' segment(s) has excessive positive impulse regarding
the peak pressure and positive duration.
'
430 MSGOUT2='a triangular waveform will be used instead to maximize
the impulse. defining a pmin
VALUE is strongly recommended
'
431 write(IOUT , FMT='(a,i10,/a,/a)
') "Updated parameters for /LOAD/PBLAST id=", ID, MSGOUT1, MSGOUT2
432 write(ISTDO, FMT='(a,i10,/a,/a)
') "Updated parameters for /LOAD/PBLAST id=", ID, MSGOUT1, MSGOUT2
440 FAC(07,NL) = MIN(TA_INF_LOC, FAC(07,NL)) !smp min value
442 DTMIN_LOC = (ONE+EM06)*(FAC(07,NL) - TT) ! go directly to trigger time
443 DTMIN_LOC=MAX(PBLAST%PBLAST_TAB(IL)%DTMIN, DTMIN_LOC)
444 !---no update on next cycle
445 IZ_UPDATE = 1 !update done
446 ILOADP(06,NL) = IZ_UPDATE
447#include "lockoff.inc"
449 write(IOUT,FMT='(a,i10,a,e16.8,a,e16.8)
') "Updated parameters for /LOAD/PBLAST id=",
450 . ID,' previous first arrival time :
',ZETA,
451 . ' is now updated to :
',FAC(07,NL)
452 write(ISTDO,FMT='(a,i10,a,e16.8,a,e16.8)
') "Updated parameters for /LOAD/PBLAST id=",
453 . ID,' previous first arrival time :
',ZETA,
454 . ' is now updated to :
',FAC(07,NL)
458 !-------------------------------------------------------------------!
460 ! /PARITH/OFF : F directly added in A(1:3,1:NUMNOD). !
461 ! /PARITH/ON : F added FSKY & and automatically treated later !
462 !-------------------------------------------------------------------!
463 ! SPMD/SMP Parith/OFF
467 N1=LLOADP(ILOADP(4,NL)+4*(I-1))
468 N2=LLOADP(ILOADP(4,NL)+4*(I-1)+1)
469 N3=LLOADP(ILOADP(4,NL)+4*(I-1)+2)
470 N4=LLOADP(ILOADP(4,NL)+4*(I-1)+3)
471 A(1,N1)=A(1,N1)+PBLAST%PBLAST_TAB(IL)%FX(I)
472 A(2,N1)=A(2,N1)+PBLAST%PBLAST_TAB(IL)%FY(I)
473 A(3,N1)=A(3,N1)+PBLAST%PBLAST_TAB(IL)%FZ(I)
474 A(1,N2)=A(1,N2)+PBLAST%PBLAST_TAB(IL)%FX(I)
475 A(2,N2)=A(2,N2)+PBLAST%PBLAST_TAB(IL)%FY(I)
476 A(3,N2)=A(3,N2)+PBLAST%PBLAST_TAB(IL)%FZ(I)
477 A(1,N3)=A(1,N3)+PBLAST%PBLAST_TAB(IL)%FX(I)
478 A(2,N3)=A(2,N3)+PBLAST%PBLAST_TAB(IL)%FY(I)
479 A(3,N3)=A(3,N3)+PBLAST%PBLAST_TAB(IL)%FZ(I)
480 IF(PBLAST%PBLAST_TAB(IL)%NPt(I) == FOUR)THEN
481 A(1,N4)=A(1,N4)+PBLAST%PBLAST_TAB(IL)%FX(I)
482 A(2,N4)=A(2,N4)+PBLAST%PBLAST_TAB(IL)%FY(I)
483 A(3,N4)=A(3,N4)+PBLAST%PBLAST_TAB(IL)%FZ(I)
488!$OMP DO SCHEDULE(GUIDED,MVSIZ)
490 IAD =IADC(ILOADP(4,NL)+4*(I-1))
491 FSKY(1,IAD) =PBLAST%PBLAST_TAB(IL)%FX(I)
492 FSKY(2,IAD) =PBLAST%PBLAST_TAB(IL)%FY(I)
493 FSKY(3,IAD) =PBLAST%PBLAST_TAB(IL)%FZ(I)
494 IAD =IADC(ILOADP(4,NL)+4*(I-1)+1)
495 FSKY(1,IAD) =PBLAST%PBLAST_TAB(IL)%FX(I)
496 FSKY(2,IAD) =PBLAST%PBLAST_TAB(IL)%FY(I)
497 FSKY(3,IAD) =PBLAST%PBLAST_TAB(IL)%FZ(I)
498 IAD =IADC(ILOADP(4,NL)+4*(I-1)+2)
499 FSKY(1,IAD) =PBLAST%PBLAST_TAB(IL)%FX(I)
500 FSKY(2,IAD) =PBLAST%PBLAST_TAB(IL)%FY(I)
501 FSKY(3,IAD) =PBLAST%PBLAST_TAB(IL)%FZ(I)
502 IF(PBLAST%PBLAST_TAB(IL)%NPt(I) == FOUR)THEN
503 IAD =IADC(ILOADP(4,NL)+4*(I-1)+3)
504 FSKY(1,IAD) =PBLAST%PBLAST_TAB(IL)%FX(I)
505 FSKY(2,IAD) =PBLAST%PBLAST_TAB(IL)%FY(I)
506 FSKY(3,IAD) =PBLAST%PBLAST_TAB(IL)%FZ(I)
513 !-------------------------------------------!
514 ! ANIMATION FILE /ANIM/VECT/FEXT !
515 ! H3D FILE /H3D/NODA/FEXT !
516 !-------------------------------------------!
518 IF(IANIM_OR_H3D > 0) THEN
520 N1=PBLAST%PBLAST_TAB(IL)%N(1,I)
521 N2=PBLAST%PBLAST_TAB(IL)%N(2,I)
522 N3=PBLAST%PBLAST_TAB(IL)%N(3,I)
523 N4=PBLAST%PBLAST_TAB(IL)%N(4,I)
524 FEXT(1,N1) = FEXT(1,N1)+PBLAST%PBLAST_TAB(IL)%FX(I)
525 FEXT(2,N1) = FEXT(2,N1)+PBLAST%PBLAST_TAB(IL)%FY(I)
526 FEXT(3,N1) = FEXT(3,N1)+PBLAST%PBLAST_TAB(IL)%FZ(I)
527 FEXT(1,N2) = FEXT(1,N2)+PBLAST%PBLAST_TAB(IL)%FX(I)
528 FEXT(2,N2) = FEXT(2,N2)+PBLAST%PBLAST_TAB(IL)%FY(I)
529 FEXT(3,N2) = FEXT(3,N2)+PBLAST%PBLAST_TAB(IL)%FZ(I)
530 FEXT(1,N3) = FEXT(1,N3)+PBLAST%PBLAST_TAB(IL)%FX(I)
531 FEXT(2,N3) = FEXT(2,N3)+PBLAST%PBLAST_TAB(IL)%FY(I)
532 FEXT(3,N3) = FEXT(3,N3)+PBLAST%PBLAST_TAB(IL)%FZ(I)
533 IF(PBLAST%PBLAST_TAB(IL)%NPt(I)==FOUR)THEN
534 FEXT(1,N4) = FEXT(1,N4)+PBLAST%PBLAST_TAB(IL)%FX(I)
535 FEXT(2,N4) = FEXT(2,N4)+PBLAST%PBLAST_TAB(IL)%FY(I)
536 FEXT(3,N4) = FEXT(3,N4)+PBLAST%PBLAST_TAB(IL)%FZ(I)
540.OR..OR.
IF(TH_HAS_NODA_PEXT > 0 ANIM_HAS_NODA_PEXT > 0 H3D_HAS_NODA_PEXT > 0) THEN
542 N1 = PBLAST%PBLAST_TAB(IL)%N(1,I)
543 N2 = PBLAST%PBLAST_TAB(IL)%N(2,I)
544 N3 = PBLAST%PBLAST_TAB(IL)%N(3,I)
545 N4 = PBLAST%PBLAST_TAB(IL)%N(4,I)
546 SURF_PATCH = PBLAST%PBLAST_TAB(IL)%SURF_PATCH(I)
547 NODA_SURF(N1) = NODA_SURF(N1) + SURF_PATCH
548 NODA_SURF(N2) = NODA_SURF(N2) + SURF_PATCH
549 NODA_SURF(N3) = NODA_SURF(N3) + SURF_PATCH
550 P = PBLAST%PBLAST_TAB(IL)%PRES(I) * SURF_PATCH
551 NODA_PEXT(N1) = NODA_PEXT(N1) + P
552 NODA_PEXT(N2) = NODA_PEXT(N2) + P
553 NODA_PEXT(N3) = NODA_PEXT(N3) + P
554 IF(PBLAST%PBLAST_TAB(IL)%NPT(I) == FOUR)THEN
555 NODA_SURF(N4) = NODA_SURF(N4) + SURF_PATCH
556 NODA_PEXT(N4) = NODA_PEXT(N4) + P
566 WRITE(IOUT,*)' ** error in memory allocation - pblast loading
'
567 WRITE(ISTDO,*)' ** error in memory allocation - pblast loading
'