78 &( np,np_max,ncls,ntag,xp,yp,tagp,clsp,eltp,shpp,dsty,
79 & npoin,nelem,nelmax,ikle,clsn,x,y )
129 INTEGER,
INTENT(INOUT) :: NP,NTAG
130 INTEGER,
INTENT(IN) :: NP_MAX,NELEM,NELMAX,NPOIN,NCLS
131 INTEGER,
INTENT(IN) :: IKLE(nelmax,3),CLSN(npoin)
132 INTEGER,
INTENT(INOUT) :: TAGP(np_max),CLSP(np_max)
133 INTEGER,
INTENT(INOUT) :: ELTP(np_max)
134 DOUBLE PRECISION,
INTENT(IN) :: X(npoin),Y(npoin),DSTY(ncls)
135 DOUBLE PRECISION,
INTENT(INOUT) :: XP(np_max),YP(np_max)
136 DOUBLE PRECISION,
INTENT(INOUT) :: SHPP(3,np_max)
140 INTEGER I,J,K,IEL,NEL,IP,NJ, K1,K2,KI,N1,N2
141 INTEGER JPID,MT,NPI,NPP, ITAG,ICLS
142 DOUBLE PRECISION R0,LENGTH,A
143 DOUBLE PRECISION X1,Y1,X2,Y2,X3,Y3, DX1,DY1,DX2,DY2,DX3,DY3
145 INTEGER,
ALLOCATABLE :: PPKLE(:),PELEM(:,:)
146 DOUBLE PRECISION,
ALLOCATABLE :: AKLE(:)
153 mt = max( mt,clsn(i) )
156 IF( mt.NE.ncls )
THEN 158 22
FORMAT(1x,
'CONDIN_DROGUES:',/,
159 & 1x,
' NUMBER OF CLASSES OF DROGUES READ FROM',/,
160 & 1x,
' THE GEOMETRY FILE ',i8,
' DIFFERENT FROM THE',/,
161 & 1x,
' NUMBER SET IN THE CAS FILE ',i8)
162 IF( mt.GT.ncls )
THEN 174 IF( clsn(i).GT.0 ) nel = nel + 1
177 ALLOCATE( pelem(2,nel) )
178 ALLOCATE( ppkle(2*nel) )
179 ALLOCATE( akle(2*nel) )
190 IF( clsn(i).GT.0 )
THEN 195 n1 = ikle( j,mod(k,3)+1 )
196 n2 = ikle( j,mod(k+1,3)+1 )
198 dx1 = ( x(i)-x(n1) )/2.d0
199 dx2 = ( x(i)-x(n2) )/2.d0
200 dy1 = ( y(i)-y(n1) )/2.d0
201 dy2 = ( y(i)-y(n2) )/2.d0
202 dx3 = ( 2.d0*x(i)-x(n1)-x(n2) )/3.d0
203 dy3 = ( 2.d0*y(i)-y(n1)-y(n2) )/3.d0
206 & dsty(clsn(i)) * ( dx1*dy3-dx3*dy1 )/2.d0
211 & dsty(clsn(i)) * ( dx3*dy2-dx2*dy3 )/2.d0
224 IF( npp.GT.np_max )
THEN 225 WRITE(
lu,32) npp,np_max
226 32
FORMAT(1x,
'DROGUES::SAMPLE_WPOIN:',/,
227 & 1x,
' REQUIRED NUMBER OF DROGUES (',i8,
')',/,
228 & 1x,
' LARGER THAN THE MAXIMUM NUMBER OF DROGUES',/,
229 & 1x,
' POSSIBLE (',i8,
')',/,
230 & 1x,
' INCREASE THE MAXIMUM OR REDUCE YOUR DENSITY.')
234 IF (nel.GT.0) length = akle(2*nel)
241 IF( jpid.EQ.
ipid )
THEN 258 CALL random_number(r0)
260 IF( r0.LT.akle(1) )
THEN 262 ppkle(1) = ppkle(1) + 1
269 IF( r0.GT.akle(ki) )
THEN 274 IF( k1+1.EQ.k2 )
EXIT 276 ppkle(k2) = ppkle(k2) + 1
292 n1 = ikle( j,mod(k,3)+1 )
293 n2 = ikle( j,mod(k+1,3)+1 )
295 x1 = ( x(i)+x(n1) )/2.d0
296 y1 = ( y(i)+y(n1) )/2.d0
297 x2 = ( x(i)+x(n2) )/2.d0
298 y2 = ( y(i)+y(n2) )/2.d0
299 x3 = ( x(i)+x(n1)+x(n2) )/3.d0
300 y3 = ( y(i)+y(n1)+y(n2) )/3.d0
305 & tagp,clsp,eltp,shpp,
306 & xp,yp, x(i),y(i),x1,y1,x3,y3 )
312 & tagp,clsp,eltp,shpp,
313 & xp,yp, x(i),y(i),x3,y3,x2,y2 )
339 &( ip,np,np_max,ielm,itag,icls,tagp,clsp,eltp,shpp,
340 & xp,yp,x1,y1,x2,y2,x3,y3 )
381 INTEGER,
INTENT(IN) :: IP,NP,NP_MAX, IELM
382 INTEGER,
INTENT(INOUT) :: TAGP(np_max),CLSP(np_max)
383 INTEGER,
INTENT(INOUT) :: ELTP(np_max),ITAG,ICLS
384 DOUBLE PRECISION,
INTENT(INOUT) :: XP(np_max),YP(np_max)
385 DOUBLE PRECISION,
INTENT(IN) :: X1,Y1,X2,Y2,X3,Y3
386 DOUBLE PRECISION,
INTENT(INOUT) :: SHPP(3,np_max)
391 DOUBLE PRECISION R1,R2, SURDET, X0,Y0
397 CALL random_number(r1)
398 CALL random_number(r2)
399 xp(i) = x1 + r1*( x2-x1 ) + r2*( x3-x1 )
400 yp(i) = y1 + r1*( y2-y1 ) + r2*( y3-y1 )
401 IF( r2 .GT. ( 1.d0-r1 ) )
THEN 402 xp(i) = ( x3+x2 ) - xp(i)
403 yp(i) = ( y3+y2 ) - yp(i)
409 shpp(1,i) = ( x3-x2 )*( y0-y2 ) - ( y3-y2 )*( x0-x2 )
410 shpp(2,i) = ( x1-x3 )*( y0-y3 ) - ( y1-y3 )*( x0-x3 )
411 shpp(3,i) = ( x2-x1 )*( y0-y1 ) - ( y2-y1 )*( x0-x1 )
412 surdet = 1.d0 / ( ( x2-x1 )*( y3-y1 ) - ( x3-x1 )*( y2-y1 ) )
413 shpp(1,i) = shpp(1,i) * surdet
414 shpp(2,i) = shpp(2,i) * surdet
415 shpp(3,i) = shpp(3,i) * surdet
431 &( np,np_max,ncls,ntag, xp,yp,tagp,clsp,eltp,shpp,dsty,
432 & ny,iy,vy,ng,xg,yg, npoin,nelem,nelmax,ikle,x,y )
486 INTEGER,
INTENT(INOUT) :: NP,NTAG
487 INTEGER,
INTENT(IN) :: NP_MAX,NELEM,NELMAX,NPOIN,NCLS
488 INTEGER,
INTENT(IN) :: IKLE(nelmax,3)
489 INTEGER,
INTENT(INOUT) :: TAGP(np_max),CLSP(np_max)
490 INTEGER,
INTENT(INOUT) :: ELTP(np_max)
491 DOUBLE PRECISION,
INTENT(IN) :: X(npoin),Y(npoin),DSTY(ncls)
492 DOUBLE PRECISION,
INTENT(INOUT) :: XP(np_max),YP(np_max)
493 DOUBLE PRECISION,
INTENT(INOUT) :: SHPP(3,np_max)
494 INTEGER,
INTENT(IN) :: NY,IY(ny), NG
495 DOUBLE PRECISION,
INTENT(IN) :: VY(ny), XG(ng),YG(ng)
499 INTEGER I,J,K,IEL,NEL, N1,N2,N3, NPP, JPID, MT
502 DOUBLE PRECISION A, R1,R2, XA,YA,XI,YI, X0,Y0,X1,Y1,X2,Y2,X3,Y3
503 DOUBLE PRECISION SURDET, DET1,DET2,DET3
504 DOUBLE PRECISION,
PARAMETER :: CHOUIA = 1.d-10
506 INTEGER,
ALLOCATABLE :: PPKLE(:),PELEM(:)
518 mt = max( mt,int(vy(i)) )
521 IF( mt.NE.ncls )
THEN 523 22
FORMAT(1x,
'CONDIN_DROGUES:',/,
524 & 1x,
' NUMBER OF CLASSES OF DROGUES READ FROM',/,
525 & 1x,
' THE POLYGON FILE ',i8,
' DIFFERENT FROM THE',/,
526 & 1x,
' NUMBER SET IN THE CAS FILE ',i8)
527 IF( mt.GT.ncls )
THEN 533 ALLOCATE( ppkle(nelem) )
548 a = ( xg(ng2)*yg(ng1) - xg(ng1)*yg(ng2) )
554 a = a + ( xg(i)*yg(i+1) - xg(i+1)*yg(i) )
563 npp = int(a*dsty(int(vy(jy)))+1.d0)
565 IF( (np+npp).GT.np_max )
THEN 566 WRITE(
lu,33) (np+npp),np_max
567 33
FORMAT(1x,
'DROGUES::SAMPLE_POLYLINE:',/,
568 & 1x,
' REQUIRED NUMBER OF DROGUES (',i8,
')',/,
569 & 1x,
' LARGER THAN THE MAXIMUM NUMBER OF DROGUES',/,
570 & 1x,
' POSSIBLE (',i8,
')',/,
571 & 1x,
' INCREASE THE MAXIMUM OR REDUCE YOUR DENSITY.')
590 & inpoly( x(i),y(i), xg(ng1:ng2),yg(ng1:ng2),ng2-ng1+1 )
598 ALLOCATE( pelem(nel) )
602 IF( ppkle(j).NE.0 )
THEN 616 DO WHILE( .NOT.found )
621 CALL random_number(r1)
622 CALL random_number(r2)
623 x0 = xi + r1*( xa-xi )
624 y0 = yi + r2*( ya-yi )
629 CALL random_number(r1)
630 CALL random_number(r2)
631 x0 = xi + r1*( xa-xi )
632 y0 = yi + r2*( ya-yi )
634 found = inpoly( x0,y0, xg(ng1:ng2),yg(ng1:ng2),ng2-ng1+1 )
654 det1 = ( x3-x2 )*( y0-y2 ) - ( y3-y2 )*( x0-x2 )
655 det2 = ( x1-x3 )*( y0-y3 ) - ( y1-y3 )*( x0-x3 )
656 det3 = ( x2-x1 )*( y0-y1 ) - ( y2-y1 )*( x0-x1 )
657 IF( det1.GE.-chouia .AND.
658 & det2.GE.-chouia .AND.
659 & det3.GE.-chouia )
THEN 670 IF( jpid.EQ.
ipid )
THEN 675 surdet = 1.d0 / ( (x2-x1)*(y3-y1) - (x3-x1)*(y2-y1) )
676 shpp(1,np) = det1*surdet
677 shpp(2,np) = det2*surdet
678 shpp(3,np) = det3*surdet
681 clsp(np) = int( vy(jy) )
702 &( np,np_max,ncls,ntag, xp,yp,tagp,clsp,eltp,shpp, ng,xg,yg,vg,
703 & npoin,nelem,nelmax,ikle,x,y )
744 INTEGER,
INTENT(INOUT) :: NP,NTAG
745 INTEGER,
INTENT(IN) :: NP_MAX,NELEM,NELMAX,NPOIN,NCLS
746 INTEGER,
INTENT(IN) :: IKLE(nelmax,3)
747 INTEGER,
INTENT(INOUT) :: TAGP(np_max),CLSP(np_max)
748 INTEGER,
INTENT(INOUT) :: ELTP(np_max)
749 DOUBLE PRECISION,
INTENT(IN) :: X(npoin),Y(npoin)
750 DOUBLE PRECISION,
INTENT(INOUT) :: XP(np_max),YP(np_max)
751 DOUBLE PRECISION,
INTENT(INOUT) :: SHPP(3,np_max)
752 INTEGER,
INTENT(IN) :: NG
753 DOUBLE PRECISION,
INTENT(IN) :: XG(ng),YG(ng),VG(ng)
757 INTEGER I,J, N1,N2,N3, JPID, MT
758 DOUBLE PRECISION X0,Y0,X1,Y1,X2,Y2,X3,Y3
759 DOUBLE PRECISION SURDET, DET1,DET2,DET3
760 DOUBLE PRECISION,
PARAMETER :: CHOUIA = 1.d-10
768 mt = max( mt,int(vg(i)) )
771 IF( mt.NE.ncls )
THEN 773 22
FORMAT(1x,
'CONDIN_DROGUES:',/,
774 & 1x,
' NUMBER OF CLASSES OF DROGUES READ FROM',/,
775 & 1x,
' THE X-Y-Z FILE ',i8,
' DIFFERENT FROM THE',/,
776 & 1x,
' NUMBER SET IN THE CAS FILE ',i8)
777 IF( mt.GT.ncls )
THEN 788 IF( (np+ng).GT.np_max )
THEN 789 WRITE(
lu,33) (np+ng),np_max
790 33
FORMAT(1x,
'DROGUES::SAMPLE_POLYLINE:',/,
791 & 1x,
' REQUIRED NUMBER OF DROGUES (',i8,
')',/,
792 & 1x,
' LARGER THAN THE MAXIMUM NUMBER OF DROGUES',/,
793 & 1x,
' POSSIBLE (',i8,
')',/,
794 & 1x,
' INCREASE THE MAXIMUM OR REDUCE YOUR DENSITY.')
824 det1 = ( x3-x2 )*( y0-y2 ) - ( y3-y2 )*( x0-x2 )
825 det2 = ( x1-x3 )*( y0-y3 ) - ( y1-y3 )*( x0-x3 )
826 det3 = ( x2-x1 )*( y0-y1 ) - ( y2-y1 )*( x0-x1 )
827 IF( det1.GE.-chouia .AND.
828 & det2.GE.-chouia .AND.
829 & det3.GE.-chouia )
THEN 840 IF( jpid.EQ.
ipid )
THEN 845 surdet = 1.d0 / ( (x2-x1)*(y3-y1) - (x3-x1)*(y2-y1) )
846 shpp(1,np) = det1*surdet
847 shpp(2,np) = det2*surdet
848 shpp(3,np) = det3*surdet
851 clsp(np) = int( vg(np) )
subroutine sample_triangle(IP, NP, NP_MAX, IELM, ITAG, ICLS, TAGP, CLSP, ELTP, SHPP, XP, YP, X1, Y1, X2, Y2, X3, Y3)
subroutine sample_wpoin(NP, NP_MAX, NCLS, NTAG, XP, YP, TAGP, CLSP, ELTP, SHPP, DSTY, NPOIN, NELEM, NELMAX, IKLE, CLSN, X, Y)
subroutine sample_polyline(NP, NP_MAX, NCLS, NTAG, XP, YP, TAGP, CLSP, ELTP, SHPP, DSTY, NY, IY, VY, NG, XG, YG, NPOIN, NELEM, NELMAX, IKLE, X, Y)
type(bief_obj), target parclss
double precision, dimension(:), allocatable drg_density
double precision, dimension(:), allocatable drg_release
type(bief_obj), target nodclss
subroutine sample_points(NP, NP_MAX, NCLS, NTAG, XP, YP, TAGP, CLSP, ELTP, SHPP, NG, XG, YG, VG, NPOIN, NELEM, NELMAX, IKLE, X, Y)