OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
upenric1_n4.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!|| upenric1_n4 ../engine/source/elements/xfem/upenric1_n4.F
25!||--- called by ------------------------------------------------------
26!|| upxfem1 ../engine/source/elements/xfem/upxfem1.F
27!||--- uses -----------------------------------------------------
28!|| crackxfem_mod ../engine/share/modules/crackxfem_mod.F
29!|| element_mod ../common_source/modules/elements/element_mod.F90
30!||====================================================================
31 SUBROUTINE upenric1_n4(IPARG ,IXC ,NFT ,JFT ,JLT ,
32 . ELCUTC ,IADC_CRK,IEL_CRK ,INOD_CRK,NXLAY ,
33 . NODEDGE,ENRTAG ,CRKEDGE ,XEDGE4N )
34C-----------------------------------------------
36 use element_mod , only : nixc
37C-----------------------------------------------
38C I m p l i c i t T y p e s
39C-----------------------------------------------
40#include "implicit_f.inc"
41C-----------------------------------------------
42C G l o b a l P a r a m e t e r s
43C-----------------------------------------------
44#include "mvsiz_p.inc"
45C-----------------------------------------------
46C C o m m o n B l o c k s
47C-----------------------------------------------
48#include "com04_c.inc"
49#include "com_xfem1.inc"
50#include "param_c.inc"
51C-----------------------------------------------
52C D u m m y A r g u m e n t s
53C-----------------------------------------------
54 INTEGER NFT,JFT,JLT,NXLAY
55 INTEGER IPARG(NPARG,*),IXC(NIXC,*),ELCUTC(2,*),IADC_CRK(4,*),
56 . iel_crk(*),enrtag(numnod,*),inod_crk(*),nodedge(2,*),xedge4n(4,*)
57C-----------------------------------------------
58C L o c a l V a r i a b l e s
59C-----------------------------------------------
60 INTEGER I,K,K1,K2,IR,II,ELCRK,ILEV,LAYCUT,IECUT,ILAY,IXEL,NELCRK,
61 . IADC1,IADC2,IADC3,IADC4,IE10,IE20,IE1,IE2,NOD1,NOD2,IED,EDGE,
62 . en1,en2,en3,en4
63 INTEGER JCT(MVSIZ),ENR0(4),D(4),NS(4)
64 DATA D/2,3,4,1/
65 TYPE (XFEM_EDGE_) , DIMENSION(*) :: CRKEDGE
66C=======================================================================
67c tag all standard cracked elements (all layers included)
68 nelcrk = 0
69 DO i=jft,jlt
70 jct(i) = 0
71 IF (elcutc(1,i+nft) /= 0) THEN
72 nelcrk = nelcrk + 1
73 jct(nelcrk) = i
74 ENDIF
75 ENDDO
76 IF (nelcrk == 0) RETURN
77C---
78 DO ilay=1,nxlay
79 ii = nxel*(ilay-1)
80 DO ir=1,nelcrk
81 i = jct(ir)
82 elcrk = iel_crk(i+nft)
83 laycut = crkedge(ilay)%LAYCUT(elcrk)
84 IF (laycut /= 0) THEN
85 iadc1 = iadc_crk(1,elcrk)
86 iadc2 = iadc_crk(2,elcrk)
87 iadc3 = iadc_crk(3,elcrk)
88 iadc4 = iadc_crk(4,elcrk)
89 ns(1) = ixc(2,i+nft)
90 ns(2) = ixc(3,i+nft)
91 ns(3) = ixc(4,i+nft)
92 ns(4) = ixc(5,i+nft)
93C
94 DO ixel=1,nxel
95 ilev = ii+ixel
96 enr0(1) = 0
97 enr0(2) = 0
98 enr0(3) = 0
99 enr0(4) = 0
100 en1 = crklvset(ilev)%ENR0(1,iadc1)
101 en2 = crklvset(ilev)%ENR0(1,iadc2)
102 en3 = crklvset(ilev)%ENR0(1,iadc3)
103 en4 = crklvset(ilev)%ENR0(1,iadc4)
104 IF (en1 /= 0) enr0(1) = en1
105 IF (en2 /= 0) enr0(2) = en2
106 IF (en3 /= 0) enr0(3) = en3
107 IF (en4 /= 0) enr0(4) = en4
108C
109 DO k=1,4
110 edge = xedge4n(k,elcrk)
111 iecut = crkedge(ilay)%ICUTEDGE(edge)
112 ie1 = 0
113 ie2 = 0
114 ied = crkedge(ilay)%IEDGEC(k,elcrk)
115 IF (iecut == 3 .and. ied > 0) THEN ! connection edge (crklayer_adv,_ini)
116 nod1 = nodedge(1,edge)
117 nod2 = nodedge(2,edge)
118 ie10 = crkedge(ilay)%EDGEENR(1,edge)
119 ie20 = crkedge(ilay)%EDGEENR(2,edge)
120 IF (nod1 == ixc(k+1,i+nft) .and.
121 . nod2 == ixc(d(k)+1,i+nft)) THEN
122 k1 = k
123 k2 = d(k)
124 ie1 = enr0(k)
125 ie2 = enr0(d(k))
126 ELSE IF (nod2 == ixc(k+1,i+nft) .and.
127 . nod1 == ixc(d(k)+1,i+nft)) THEN
128 k1 = d(k)
129 k2 = k
130 ie1 = enr0(d(k))
131 ie2 = enr0(k)
132 ENDIF
133c
134c set ENRTAG for nodal enrichment update
135c
136 IF (ie1 /= 0) enrtag(ns(k1),abs(ie1))
137 . = max(enrtag(ns(k1),abs(ie1)),ie10)
138 IF (ie2 /= 0) enrtag(ns(k2),abs(ie2))
139 . = max(enrtag(ns(k2),abs(ie2)),ie20)
140
141c if (IE1 /= 0) then
142c write(*,'(A,3I5)') 'UPX1: NS,IE,ENRTAG=',NS(K1),IE1,ENRTAG(NS(K1),ABS(IE1))
143c endif
144c if (IE2 /= 0) then
145c write(*,'(A,3I5)') 'UPX1: NS,IE,ENRTAG=',NS(K2),IE1,ENRTAG(NS(K2),ABS(IE2))
146c endif
147C
148 ENDIF ! IF (IECUT == 3)
149 ENDDO ! DO K=1,4
150 ENDDO ! IXEL=1,NXEL
151 ENDIF ! If (laycut /= 0)
152 ENDDO ! DO IR=1,NELCRK
153 ENDDO ! DO ILAY=1,NXLAY
154C-----------------------------------------------
155 RETURN
156 END
#define max(a, b)
Definition macros.h:21
type(xfem_lvset_), dimension(:), allocatable crklvset
subroutine upenric1_n4(iparg, ixc, nft, jft, jlt, elcutc, iadc_crk, iel_crk, inod_crk, nxlay, nodedge, enrtag, crkedge, xedge4n)
Definition upenric1_n4.F:34