OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
xfem_crack_init.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!|| xfem_crack_init ../starter/source/elements/xfem/xfem_crack_init.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- uses -----------------------------------------------------
28!||====================================================================
29 SUBROUTINE xfem_crack_init(
30 . IPARG ,IXC ,IXTG ,INOD_CRK ,NODLEVXF,
31 . INDX_CRK,NCRKPART,CRKSHELL)
32C-----------------------------------------------
33C M o d u l e s
34C-----------------------------------------------
35 USE xfem2def_mod
36C-----------------------------------------------
37C I m p l i c i t T y p e s
38C-----------------------------------------------
39#include "implicit_f.inc"
40C-----------------------------------------------
41C C o m m o n B l o c k s
42C-----------------------------------------------
43#include "com01_c.inc"
44#include "com04_c.inc"
45#include "com_xfem1.inc"
46#include "param_c.inc"
47C-----------------------------------------------
48C D u m m y A r g u m e n t s
49C-----------------------------------------------
50 INTEGER NCRKPART
51 INTEGER IPARG(NPARG,*),IXC(NIXC,*),IXTG(NIXTG,*),INOD_CRK(*),
52 . nodlevxf(*),indx_crk(*)
53 TYPE (XFEM_SHELL_) , DIMENSION(NLEVMAX) :: CRKSHELL
54C-----------------------------------------------
55C L O C A L V A R I A B L E S
56C-----------------------------------------------
57 INTEGER NG,ITY,LFT,LLT,N,I,J,IPRT,NEL,NFT,IXFEM,ILEV,NCOUNT,
58 . SHCOUNT,NCOUNTG
59 INTEGER TAG_ARRAY(NUMNOD),TAG_SHELLS_C(NUMELC),TAG_SHELLS_TG(NUMELTG),
60 . NLEVXF,NN(4),TYPE_SHELLS_C(NUMELC),TYPE_SHELLS_TG(NUMELTG)
61C=======================================================================
62 DO ilev=1,nlevmax
63 crkshell(ilev)%CRKNUMSHELL = 0
64 crkshell(ilev)%CRKNUMSH4 = 0
65 crkshell(ilev)%CRKNUMSH3 = 0
66 ENDDO
67C-----------------------------------------------
68 DO ilev=1,nlevmax
69 tag_array=0
70 tag_shells_c=0
71 tag_shells_tg=0
72 shcount =0
73 type_shells_c=0
74 type_shells_tg=0
75c
76 DO ng=1,ngroup
77 ixfem =iparg(54,ng)
78 IF (ixfem > 0) THEN
79 nel =iparg(2,ng)
80 nft =iparg(3,ng)
81 ity =iparg(5,ng)
82 nlevxf=iparg(65,ng)
83 lft=1
84 llt=nel
85 IF (ity == 3) THEN
86C-----------------------------------------------
87C COQUES 4N
88C-----------------------------------------------
89 DO i=lft,llt
90 n = i + nft
91 tag_array(ixc(2,n))=1
92 tag_array(ixc(3,n))=1
93 tag_array(ixc(4,n))=1
94 tag_array(ixc(5,n))=1
95C
96 nn(1) = inod_crk(ixc(2,n))
97 nn(2) = inod_crk(ixc(3,n))
98 nn(3) = inod_crk(ixc(4,n))
99 nn(4) = inod_crk(ixc(5,n))
100C
101 nodlevxf(nn(1)) = nlevxf
102 nodlevxf(nn(2)) = nlevxf
103 nodlevxf(nn(3)) = nlevxf
104 nodlevxf(nn(4)) = nlevxf
105C
106 tag_shells_c(n) = ilev
107 type_shells_c(n) = 4
108 crkshell(ilev)%CRKNUMSHELL = crkshell(ilev)%CRKNUMSHELL+1
109 crkshell(ilev)%CRKNUMSH4 = crkshell(ilev)%CRKNUMSH4+1
110 ENDDO
111 ELSEIF (ity == 7) THEN
112C-----------------------------------------------
113C COQUES 3N
114C-----------------------------------------------
115 DO i=lft,llt
116 n = i + nft
117 tag_array(ixtg(2,n))=1
118 tag_array(ixtg(3,n))=1
119 tag_array(ixtg(4,n))=1
120C
121 nn(1) = inod_crk(ixtg(2,n))
122 nn(2) = inod_crk(ixtg(3,n))
123 nn(3) = inod_crk(ixtg(4,n))
124C
125 nodlevxf(nn(1)) = nlevxf
126 nodlevxf(nn(2)) = nlevxf
127 nodlevxf(nn(3)) = nlevxf
128C
129 tag_shells_tg(n) = ilev
130 type_shells_tg(n) = 3
131 crkshell(ilev)%CRKNUMSHELL = crkshell(ilev)%CRKNUMSHELL+1
132 crkshell(ilev)%CRKNUMSH3 = crkshell(ilev)%CRKNUMSH3+1
133 ENDDO
134 ENDIF
135 ENDIF ! IXFEM > 0
136 ENDDO ! NG=1,NGROUP
137C-------------------------------
138C CRACK Shells Post treatments
139C-------------------------------
140 shcount = crkshell(ilev)%CRKNUMSHELL
141 ALLOCATE (crkshell(ilev)%PHANTOML(shcount))
142 ALLOCATE (crkshell(ilev)%ELTYPE(shcount))
143C
144 shcount=0
145 DO i=1, numelc
146 IF (tag_shells_c(i) > 0)THEN
147 shcount = shcount+1
148 crkshell(ilev)%PHANTOML(shcount)=i
149 crkshell(ilev)%ELTYPE(shcount)=type_shells_c(i)
150 ENDIF
151 ENDDO
152C
153 DO i=1,numeltg
154 IF (tag_shells_tg(i) > 0)THEN
155 shcount = shcount+1
156 crkshell(ilev)%PHANTOML(shcount)=i
157 crkshell(ilev)%ELTYPE(shcount)=type_shells_tg(i)
158 ENDIF
159 ENDDO
160C
161 ENDDO ! DO ILEV=1,NLEVMAX
162c
163C-----------------------------------------------------------------------
164C Numeros globaux des shell crack (by level)
165C-------------------------------
166 ncount = 0
167 DO ilev=1,nlevmax
168 ALLOCATE(crkshell(ilev)%PHANTOMG(crkshell(ilev)%CRKNUMSHELL))
169C
170 DO i=1,crkshell(ilev)%CRKNUMSHELL
171 ncount=ncount+1
172 crkshell(ilev)%PHANTOMG(i)=ncount
173 ENDDO
174 ENDDO
175C
176C Crack Nodes Post treatments
177C
178C-------------------------------
179C Crack parts (by level)
180C-------------------------------
181 DO ilev=1,nlevmax
182 IF (crkshell(ilev)%CRKNUMSHELL > 0) THEN
183 ncrkpart = ncrkpart + 1
184 indx_crk(ncrkpart) = ilev
185 ENDIF
186 ENDDO
187C
188C-------------------------------
189C Numeros globaux des NODES (unconnected) for shell crack (by level)
190C-------------------------------
191C
192 ncountg = 0
193 DO ilev=1,nlevmax
194 ALLOCATE(crkshell(ilev)%XNODEG(4,crkshell(ilev)%CRKNUMSHELL))
195 ALLOCATE(crkshell(ilev)%XNODEL(4,crkshell(ilev)%CRKNUMSHELL))
196C
197 ncount = 0
198 DO i=1,crkshell(ilev)%CRKNUMSHELL
199 DO j=1,4
200 ncount = ncount + 1
201 ncountg = ncountg + 1
202 crkshell(ilev)%XNODEG(j,i) = ncountg ! global num de phantom nodes
203 crkshell(ilev)%XNODEL(j,i) = ncount ! or = 4*(I -1) + J = Num nodes phantomes d'un seul ilev
204 END DO
205 ENDDO
206 ENDDO
207C---
208 ncrknodg = 4*crkshell(1)%CRKNUMSHELL ! = NCOUNT
209C-----------
210 RETURN
211 END
subroutine xfem_crack_init(iparg, ixc, ixtg, inod_crk, nodlevxf, indx_crk, ncrkpart, crkshell)