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