OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
c_ncrkxfem.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!|| c_ncrkxfem ../starter/source/restart/ddsplit/c_ncrkxfem.F
25!||--- called by ------------------------------------------------------
26!|| ddsplit ../starter/source/restart/ddsplit/ddsplit.F
27!||--- uses -----------------------------------------------------
28!||====================================================================
29 SUBROUTINE c_ncrkxfem(NODGLOB,INOD_CRKXFEM,INOD_L,
30 . NUMNOD_L,NUMNODCRKXFE_L,INDEX,PROC,
31 . IXC,IXTG,CEP_XFE,NODLOCAL,NODLEVXF_L,
32 . NODLEVXF,NODGLOBXFE,NOD_XFE_L,CRKSHELL)
33C-----------------------------------------------
34 USE xfem2def_mod
35 use element_mod , only : nixc,nixtg
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 "com_xfem1.inc"
44#include "com04_c.inc"
45C-----------------------------------------------
46C D u m m y A r g u m e n t s
47C-----------------------------------------------
48 INTEGER NODGLOB(*),INOD_CRKXFEM(*),INOD_L(*),
49 . NUMNOD_L,NUMNODCRKXFE_L,INDEX(*),PROC,
50 . IXC(NIXC,*),IXTG(NIXTG,*),CEP_XFE(*),
51 . nodlocal(*),nodlevxf_l(*),nodlevxf(*),
52 . nodglobxfe(*),nod_xfe_l
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 I,NL_L,J,K,NOD,ELTYP,ELEM,
58 . INOD_CRK,NOD_XFE_G,NELCRK
59 INTEGER, DIMENSION(:), ALLOCATABLE :: NODTAG
60C=======================================================================
61! 1d array
62 ALLOCATE( nodtag(0:numnod_l+1) )
63! ----------------------------------
64c Phantoma nodes each ply
65C-----------------------------------------------
66 nelcrk = 0
67 DO k=1,nlevmax
68 DO i=1,crkshell(k)%CRKNUMSHELL
69 elem = crkshell(k)%PHANTOML(i)
70 eltyp = crkshell(k)%ELTYPE(i)
71 IF (cep_xfe(i) == proc) THEN
72 IF(eltyp == 4) THEN
73 DO j=1,eltyp
74 nod = ixc(j+1,elem)
75 IF (nod > 0) THEN
76 IF (inod_crkxfem(nod) > 0) THEN ! N noeud local xfem
77 nod_xfe_g = crkshell(k)%XNODEG(j,i) ! ID GLOB NODE PHANTOME SUR PLY
78 nod_xfe_l = nod_xfe_l + 1 ! Local ID Node Phantome Sur Ply
79 nodglobxfe(nod_xfe_l) = nod_xfe_g ! Id local -> Id global (phant)
80 ENDIF
81 ENDIF
82 ENDDO
83 ELSEIF (eltyp == 3) THEN
84 DO j=1,eltyp
85 nod = ixtg(j+1,elem)
86 IF (nod > 0) THEN
87 IF(inod_crkxfem(nod) > 0)THEN
88 nod_xfe_g = crkshell(k)%XNODEG(j,i)
89 nod_xfe_l = nod_xfe_l + 1
90 nodglobxfe(nod_xfe_l) = nod_xfe_g
91 ENDIF
92 ENDIF
93 ENDDO
94C
95c add one more node (as sh4) for animation files (3N -> 4N)
96C
97 nod_xfe_g = crkshell(k)%XNODEG(4,i)
98 nod_xfe_l = nod_xfe_l + 1
99 nodglobxfe(nod_xfe_l) = nod_xfe_g
100 END IF
101 ENDIF
102 ENDDO
103 nelcrk = nelcrk + crkshell(k)%CRKNUMSHELL ! Nb elements total sur nlevmax
104 ENDDO
105 numnodxfe = nod_xfe_l ! Nb noeuds total sur nlevmax
106C
107 nodtag(1:numnod_l) = 0
108 k = 1 ! the same as K=1,NLEVMAX
109 DO i=1,crkshell(k)%CRKNUMSHELL
110 eltyp = crkshell(k)%ELTYPE(i)
111 elem = crkshell(k)%PHANTOML(i)
112 IF (cep_xfe(i) == proc) THEN
113 IF (eltyp == 4) THEN
114 DO j=1,eltyp
115 nod = ixc(j+1,elem)
116 nodtag(nodlocal(nod))=nod
117 ENDDO
118 ELSEIF (eltyp == 3) THEN
119 DO j=1,eltyp
120 nod = ixtg(j+1,elem)
121 nodtag(nodlocal(nod))=nod
122 ENDDO
123 END IF
124 END IF
125 END DO
126C---
127 nl_l = 0
128 DO i=1,numnod_l
129 nod = nodtag(i)
130 IF (nod > 0) THEN
131 IF (inod_crkxfem(nod) > 0) THEN
132 nl_l = nl_l + 1
133 inod_l(i) = nl_l
134 index(nl_l) = inod_crkxfem(nod)
135 inod_crk = inod_crkxfem(nod)
136 nodlevxf_l(nl_l) = nodlevxf(inod_crk) ! number of copies of a standard xfem node
137 ENDIF
138 ENDIF
139 ENDDO
140C---
141 numnodcrkxfe_l = nl_l
142C---
143! ----------------------------------
144! 1d array
145 DEALLOCATE( nodtag )
146! ----------------------------------
147 RETURN
148 END
subroutine c_ncrkxfem(nodglob, inod_crkxfem, inod_l, numnod_l, numnodcrkxfe_l, index, proc, ixc, ixtg, cep_xfe, nodlocal, nodlevxf_l, nodlevxf, nodglobxfe, nod_xfe_l, crkshell)
Definition c_ncrkxfem.F:33