OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
pornod.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| pornod ../starter/source/ale/pornod.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| fretitl2 ../starter/source/starter/freform.F
30!|| ifrontplus ../starter/source/spmd/node/frontplus.F
31!||--- uses -----------------------------------------------------
32!|| message_mod ../starter/share/message_module/message_mod.F
33!||====================================================================
34 SUBROUTINE pornod(GEO ,IXS ,IXQ ,NODPOR ,ICODE ,ITAB ,NPBY ,LPBY ,IGEO)
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
173 END
#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 pornod(geo, ixs, ixq, nodpor, icode, itab, npby, lpby, igeo)
Definition pornod.F:35
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