OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
pornod.F File Reference
#include "implicit_f.inc"
#include "param_c.inc"
#include "com01_c.inc"
#include "com04_c.inc"
#include "scr17_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine pornod (geo, ixs, ixq, nodpor, icode, itab, npby, lpby, igeo)

Function/Subroutine Documentation

◆ pornod()

subroutine pornod ( dimension(npropg,numgeo), intent(inout) geo,
integer, dimension(nixs,numels), intent(in) ixs,
integer, dimension(nixq,numelq), intent(in) ixq,
integer, dimension(*), intent(inout) nodpor,
integer, dimension(numnod), intent(in) icode,
integer, dimension(numnod), intent(in) itab,
integer, dimension(nnpby,*), intent(in) npby,
integer, dimension(*), intent(in) lpby,
integer, dimension(npropgi,numgeo), intent(in) igeo )

Definition at line 34 of file pornod.F.

35C-----------------------------------------------
36C D e s c r i p t i o n
37C-----------------------------------------------
38C This subroutine is marking and storing nodes related to porous option
39C-----------------------------------------------
40C M o d u l e s
41C-----------------------------------------------
42 USE message_mod
44 use element_mod , only : nixs,nixq
45C-----------------------------------------------
46C I m p l i c i t T y p e s
47C-----------------------------------------------
48#include "implicit_f.inc"
49C-----------------------------------------------
50C G l o b a l P a r a m e t e r s
51C-----------------------------------------------
52#include "param_c.inc"
53#include "com01_c.inc"
54#include "com04_c.inc"
55#include "scr17_c.inc"
56C-----------------------------------------------
57C D u m m y A r g u m e n t s
58C-----------------------------------------------
59 INTEGER,INTENT(IN) :: IXS(NIXS,NUMELS),IXQ(NIXQ,NUMELQ),IGEO(NPROPGI,NUMGEO)
60 INTEGER,INTENT(IN) :: ICODE(NUMNOD),ITAB(NUMNOD),NPBY(NNPBY,*),LPBY(*)
61 INTEGER,INTENT(INOUT) :: NODPOR(*)
62 my_real,INTENT(INOUT) :: geo(npropg,numgeo)
63C-----------------------------------------------
64C L o c a l V a r i a b l e s
65C-----------------------------------------------
66 INTEGER, DIMENSION(NUMNOD) :: ITAG
67 INTEGER IG,N,I,J,K,IC,IC1,IC2,IC3,IC4,JWARN,IRB,KRB,P
68 INTEGER, DIMENSION(:,:),ALLOCATABLE :: INDEX
69 INTEGER IWORK(70000),IT
70 CHARACTER(len=nchartitle) :: TITR
71C-----------------------------------------------
72C S o u r c e L i n e s
73C-----------------------------------------------
74 !--------------------!
75 ! TAGGING !
76 !--------------------!
77 numpor=0
78 DO i=1,numnod
79 itag(i)=0
80 END DO
81C-----------------------------------------------
82 DO ig=1,numgeo
83 IF(int(geo(12,ig)) /= 15)cycle !IG
84 IF(n2d == 0)THEN
85 DO i=1,numels
86 IF(ixs(10,i) /= ig)cycle !I
87 DO j=2,9
88 IF(itag(ixs(j,i)) == 0)itag(ixs(j,i))=ig
89 END DO !J=2,9
90 END DO ! I=1,NUMELS
91 ELSE
92 DO i=1,numelq
93 IF(ixq(6,i) /= ig)cycle !I
94 DO j=2,5
95 IF(itag(ixq(j,i)) == 0)itag(ixq(j,i))=ig
96 END DO ! J=2,5
97 END DO !I=1,NUMELQ
98 ENDIF
99
100 !--------------------!
101 ! COUNT AND STORE !
102 !--------------------!
103 n=0
104 jwarn=0
105 DO i=1,numnod
106 IF(itag(i) /= ig)cycle !I
107 ic=icode(i)
108 ic1=ic/512
109 ic2=(ic-512*ic1)/64
110 ic3=(ic-512*ic1-64*ic2)/8
111 ic4=ic-512*ic1-64*ic2-8*ic3
112 IF(n2d == 0)THEN
113 IF(ic4 == 7)cycle !I
114 ELSE
115 IF(ic4 >= 6)cycle !I
116 ENDIF
117 IF(int(geo(30,ig)) /= 0 .AND. ic1 /= 0)THEN
118 jwarn = jwarn+1
119 CALL fretitl2(titr,igeo(npropgi-ltitr+1,ig),ltitr)
120 CALL ancmsg(msgid=358,msgtype=msgwarning,anmode=aninfo_blind_2,i1=igeo(1,ig),c1=titr,i2=itab(i))
121 ENDIF
122 n=n+1
123 nodpor(numpor+n)=i
124 END DO !I=1,NUMNOD
125
126 !---------------------------!
127 ! Sorting nodes by porosity !
128 ! (spmd order) !
129 !---------------------------!
130 ALLOCATE(index(n,3))
131 DO i=1,n
132 index(i,3)=nodpor(numpor+i)
133 ENDDO
134 IF(n > 0) CALL my_orders(0,iwork,index(1,3),index,n,1)
135 DO i=1,n
136 it = index(i,1)
137 nodpor(numpor+i)=index(it,3)
138 ENDDO
139 DEALLOCATE(index)
140 !-----------------------------------------
141 !WARNING HONEYCOMB POROUS MEDIUM PID=',IG
142 !-----------------------------------------
143 IF(jwarn > 0) THEN
144 CALL fretitl2(titr,igeo(npropgi-ltitr+1,ig),ltitr)
145 CALL ancmsg(msgid=359,msgtype=msgwarning,anmode=aninfo,i1=igeo(1,ig),c1=titr,i2=jwarn)
146 ENDIF
147 geo(31,ig)=n+.1
148 numpor=numpor+n
149 irb=int(geo(29,ig))
150 IF(irb /= 0)THEN
151 k=1
152 DO krb=1,nrbykin
153 IF(npby(1,krb) == irb)THEN
154 geo(33,ig) = krb+ em01
155 geo(34,ig) = lpby(k)+em01
156 ENDIF
157 k=k+npby(2,krb)
158 END DO !KRB=1,NRBYKIN
159 IF(geo(33,ig) == zero)THEN
160 geo(29,ig)=em01
161 CALL fretitl2(titr,igeo(npropgi-ltitr+1,ig),ltitr)
162 CALL ancmsg(msgid=360,msgtype=msgwarning,anmode=aninfo_blind_1,i1=igeo(1,ig),c1=titr,i2=irb)
163 ELSE
164 ! main node RB replicate on all procs for SPMD calculation of porosity
165 DO p = 1, nspmd
166 CALL ifrontplus(irb,p)
167 ENDDO
168 ENDIF !IF (GEO(33,IG) == ZERO)
169 ENDIF !IF(IRB /= 0)
170 END DO !IG=1,NUMGEO
171C-----------------------------------------------
172 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine ifrontplus(n, p)
Definition frontplus.F:101
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
Definition my_orders.c:82
integer, parameter nchartitle
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:895
subroutine fretitl2(titr, iasc, l)
Definition freform.F:799