OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
nlocal_reg_mod.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!|| nlocal_reg_mod ../common_source/modules/nlocal_reg_mod.F
25!||--- called by ------------------------------------------------------
26!|| alemain ../engine/source/ale/alemain.F
27!|| bforc2 ../engine/source/ale/bimat/bforc2.F
28!|| c3fint_reg ../engine/source/elements/sh3n/coque3n/c3fint_reg.F
29!|| c3fint_reg_ini ../starter/source/elements/sh3n/coque3n/c3fint_reg_ini.F
30!|| c3forc3 ../engine/source/elements/sh3n/coque3n/c3forc3.F
31!|| c3forc3_crk ../engine/source/elements/xfem/c3forc3_crk.F
32!|| c3init3 ../starter/source/elements/sh3n/coque3n/c3init3.F
33!|| c_front ../starter/source/restart/ddsplit/c_front.F
34!|| cbafint_reg ../engine/source/elements/shell/coqueba/cbafint_reg.F
35!|| cbafint_reg_ini ../starter/source/elements/shell/coqueba/cbafint_reg_ini.F
36!|| cbaforc3 ../engine/source/elements/shell/coqueba/cbaforc3.F
37!|| cbainit3 ../starter/source/elements/shell/coqueba/cbainit3.F
38!|| cbavarnl ../engine/source/elements/shell/coqueba/cbavarnl.F
39!|| cdk6fint_reg ../engine/source/elements/sh3n/coquedk6/cdk6fint_reg.F
40!|| cdk6forc3 ../engine/source/elements/sh3n/coquedk6/cdk6forc3.F
41!|| cdkfint_reg ../engine/source/elements/sh3n/coquedk/cdkfint_reg.F
42!|| cdkfint_reg_ini ../starter/source/elements/sh3n/coquedk/cdkfint_reg_ini.F
43!|| cdkforc3 ../engine/source/elements/sh3n/coquedk/cdkforc3.F
44!|| cdkinit3 ../starter/source/elements/sh3n/coquedk/cdkinit3.F
45!|| cfint_reg ../engine/source/elements/shell/coque/cfint_reg.F
46!|| cfint_reg_ini ../starter/source/elements/shell/coque/cfint_reg_ini.F
47!|| cforc3 ../engine/source/elements/shell/coque/cforc3.F
48!|| cforc3_crk ../engine/source/elements/xfem/cforc3_crk.F
49!|| cinit3 ../starter/source/elements/shell/coque/cinit3.F
50!|| cmain3 ../engine/source/materials/mat_share/cmain3.F
51!|| czforc3 ../engine/source/elements/shell/coquez/czforc3.F
52!|| czforc3_crk ../engine/source/elements/xfem/czforc3_crk.F
53!|| ddsplit ../starter/source/restart/ddsplit/ddsplit.F
54!|| dtcba_reg ../engine/source/elements/shell/coqueba/dtcba_reg.F
55!|| dtcdk_reg ../engine/source/elements/sh3n/coquedk/dtcdk_reg.F
56!|| forint ../engine/source/elements/forint.F
57!|| forintc ../engine/source/elements/forintc.F
58!|| forintp ../engine/source/elements/forintp.F
59!|| hm_read_fail ../starter/source/materials/fail/hm_read_fail.F
60!|| hm_read_fail_gurson ../starter/source/materials/fail/gurson/hm_read_fail_gurson.F
61!|| hm_read_nonlocal ../starter/source/materials/nonlocal/hm_read_nonlocal.F
62!|| ig3duforc3 ../engine/source/elements/ige3d/ig3duforc3.F
63!|| initia ../starter/source/elements/initia/initia.F
64!|| law104_upd ../starter/source/materials/mat/mat104/law104_upd.F
65!|| lectur ../engine/source/input/lectur.F
66!|| mmain ../engine/source/materials/mat_share/mmain.F90
67!|| mulaw ../engine/source/materials/mat_share/mulaw.F90
68!|| mulawc ../engine/source/materials/mat_share/mulawc.F90
69!|| nloc_dmg_init ../starter/source/materials/fail/nloc_dmg_init.F
70!|| nlocal_acc ../engine/source/assembly/nlocal_acc.F
71!|| nlocal_dtnoda ../engine/source/time_step/nlocal_dtnoda.F
72!|| nlocal_incr ../engine/source/assembly/nlocal_incr.F
73!|| nlocal_init_sta ../starter/source/materials/fail/nlocal_init_sta.F
74!|| nlocal_vel ../engine/source/assembly/nlocal_vel.F
75!|| q4forc2 ../engine/source/elements/solid_2d/quad4/q4forc2.F
76!|| qforc2 ../engine/source/elements/solid_2d/quad/qforc2.F
77!|| r2r_exchange ../engine/source/coupling/rad2rad/r2r_exchange.F
78!|| r2r_getdata ../engine/source/coupling/rad2rad/r2r_getdata.F
79!|| r2r_group ../starter/source/coupling/rad2rad/r2r_group.F
80!|| r2r_init ../engine/source/coupling/rad2rad/r2r_init.F
81!|| rdresb ../engine/source/output/restart/rdresb.F
82!|| read_material_models ../starter/source/materials/read_material_models.F
83!|| read_nloc_struct ../engine/source/output/restart/read_nloc_struct.F
84!|| resol ../engine/source/engine/resol.F
85!|| resol_init ../engine/source/engine/resol_init.F
86!|| restmod ../engine/share/modules/restart_mod.F
87!|| s10forc3 ../engine/source/elements/solid/solide10/s10forc3.F
88!|| s16forc3 ../engine/source/elements/thickshell/solide16/s16forc3.F
89!|| s20forc3 ../engine/source/elements/solid/solide20/s20forc3.F
90!|| s4fint_reg ../engine/source/elements/solid/solide4/s4fint_reg.F
91!|| s4forc3 ../engine/source/elements/solid/solide4/s4forc3.F
92!|| s6cfint_reg ../engine/source/elements/thickshell/solide6c/s6cfint_reg.F
93!|| s6cforc3 ../engine/source/elements/thickshell/solide6c/s6cforc3.F
94!|| s6fint_reg ../engine/source/elements/solid/solide6z/s6fint_reg.F90
95!|| s6zforc3 ../engine/source/elements/solid/solide6z/s6zforc3.F90
96!|| s8cfint_reg ../engine/source/elements/thickshell/solide8c/s8cfint_reg.F
97!|| s8cforc3 ../engine/source/elements/thickshell/solide8c/s8cforc3.F
98!|| s8eforc3 ../engine/source/elements/solid/solide8e/s8eforc3.F
99!|| s8sforc3 ../engine/source/elements/solid/solide8s/s8sforc3.F
100!|| s8zfint_reg ../engine/source/elements/solid/solide8z/s8zfint_reg.F
101!|| s8zforc3 ../engine/source/elements/solid/solide8z/s8zforc3.F
102!|| scfint_reg ../engine/source/elements/thickshell/solidec/scfint_reg.F
103!|| scforc3 ../engine/source/elements/thickshell/solidec/scforc3.F
104!|| sfint_reg ../engine/source/elements/solid/solide/sfint_reg.F
105!|| sforc3 ../engine/source/elements/solid/solide/sforc3.F
106!|| spmd_collect_nlocal ../engine/source/mpi/output/spmd_collect_nlocal.F
107!|| spmd_exch_r2r_nl ../engine/source/mpi/r2r/spmd_exch_r2r_nl.F
108!|| spmd_exch_sub_poff ../engine/source/mpi/spmd_exch_sub.F
109!|| spmd_exch_sub_pon ../engine/source/mpi/spmd_exch_sub.F
110!|| spmd_sub_boundaries ../engine/source/mpi/spmd_exch_sub.F
111!|| spstres ../engine/source/elements/sph/spstres.F
112!|| szforc3 ../engine/source/elements/solid/solidez/szforc3.F
113!|| updmat ../starter/source/materials/updmat.F
114!|| usermat_shell ../engine/source/materials/mat_share/usermat_shell.F
115!|| usermat_solid ../engine/source/materials/mat_share/usermat_solid.F
116!|| w_front ../starter/source/restart/ddsplit/w_front.F
117!|| write_nloc_struct ../engine/source/output/restart/write_nloc_struct.F
118!||====================================================================
120C-----------------------------------------------------------------------
121#include "my_real.inc"
122c=======================================================================
123c define type NLOCAL_STRUCT_ for nodal variable regularization
124c=======================================================================
125c
126!
127 ! Safety coefficient for non-local stability vs mechanical stability
128 ! (here we have a good compromise to find, DENS must be as low as
129 ! possible but sufficiently high to avoid the decrease of the timestep)
130 my_real, PARAMETER :: csta = 40.0d0
131!
132 ! Coefficient for non-local stability to take into account damping
133 my_real, PARAMETER :: cdamp = 0.7d0
134!
136 integer :: imod ! Non-local regularization flag
137 integer :: nnod ! Number of nodes with additional d.o.fs
138 integer :: l_nloc ! Length of non-local vectors
139 integer :: numels_nl ! Number of non-local solids elements
140 integer :: numelc_nl ! Number of non-local shell elements
141 integer :: numeltg_nl ! Number of non-local triangle shell elements
142 integer :: nddmax ! Maximum number of additional d.o.fs
143 integer :: lcne_nl ! Length of the PROCNE table
144 my_real, DIMENSION(:) , ALLOCATABLE :: dens ! (NUMMAT) Non-local 'density' parameter
145 my_real, DIMENSION(:) , ALLOCATABLE :: damp ! (NUMMAT) Non-local 'damping' coefficient
146 my_real, DIMENSION(:) , ALLOCATABLE :: len ! (NUMMAT) Non-local internal length
147 my_real, DIMENSION(:) , ALLOCATABLE :: le_max ! (NUMMAT) Maximal element length target
148 my_real, DIMENSION(:) , ALLOCATABLE :: sspnl ! (NUMMAT) Non-local "sound speed"
149 integer, DIMENSION(:) , ALLOCATABLE :: indx ! (nnod) nodal index table
150 integer, DIMENSION(:) , ALLOCATABLE :: posi ! (NNOD+1) Node first d.o.f position in non-local vectors
151 integer, DIMENSION(:) , ALLOCATABLE :: idxi ! (numnod) inversed nodal index table
152 integer, DIMENSION(:) , ALLOCATABLE :: addcne ! (0:NNOD+1) Addresses of non-local nodes in the FSKY vector
153 integer, DIMENSION(:) , ALLOCATABLE :: cne ! ADDCNE(NNOD+1)-1 Element attached to nodes in the FSKY vector
154 integer, DIMENSION(:) , ALLOCATABLE :: PROCNE ! LCNE_NL Number of the processor on which the element is located
155 integer, DIMENSION(:,:) , ALLOCATABLE :: iads ! Addresses sky for solids non-local elements
156 integer, DIMENSION(:,:) , ALLOCATABLE :: iadc ! Addresses sky for shells non-local elements
157 integer, DIMENSION(:,:) , ALLOCATABLE :: iadtg ! Addresses sky for triangle shells non-local elements
158 my_real, DIMENSION(:) , ALLOCATABLE :: mass ! (L_NLOC) Non-local mass
159 my_real, DIMENSION(:) , ALLOCATABLE :: mass0 ! (L_NLOC) Non-local mass initial
160 my_real, DIMENSION(:,:) , ALLOCATABLE :: fnl ! (L_NLOC,NTHREAD) Non-local force/accelerations
161 my_real, DIMENSION(:) , ALLOCATABLE :: vnl ! (L_NLOC) Non-local variable velocities
162 my_real, DIMENSION(:) , ALLOCATABLE :: vnl_old ! (L_NLOC) Old Non-local variable velocities
163 my_real, DIMENSION(:) , ALLOCATABLE :: dnl ! (L_NLOC) Non-local variable increment
164 my_real, DIMENSION(:) , ALLOCATABLE :: unl ! (L_NLOC) Non-local cumulated variable
165 my_real, DIMENSION(:,:) , ALLOCATABLE :: stifnl ! (L_NLOC,NTHREAD) Non-local nodal stiffness
166 my_real, DIMENSION(:,:) , ALLOCATABLE :: fsky ! (ADDCNE(NNOD+1),NDDMAX) Non-local skyline vector for PARITH/ON
167 my_real, DIMENSION(:,:) , ALLOCATABLE :: stsky ! (ADDCNE(NNOD+1),NDDMAX) Non-local skyline vector for stiffness in PARITH/ON
168 integer, DIMENSION(:) , ALLOCATABLE :: iad_elem ! (NSPMD+1) Non-local IAD_ELEM vector for SPMD boundaries
169 integer, DIMENSION(:) , ALLOCATABLE :: iad_size ! (NSPMD+1) Non-local size of the buffer at the domains boundaries
170 integer, DIMENSION(:) , ALLOCATABLE :: fr_elem ! (TOTAL_NODES) Non-local FR_ELEM vector for SPMD boundaries
171C SPMD PON BOUNDARIES
172 integer, DIMENSION(:) , ALLOCATABLE :: isendsp ! Skyline PON Send index
173 integer, DIMENSION(:) , ALLOCATABLE :: irecsp ! Skyline PON Receive index
174
175! --------------------------------
176! communication for parith/on
177 integer, DIMENSION(:) , ALLOCATABLE :: iadsdp ! dim = NSPMD+1
178 integer, DIMENSION(:) , ALLOCATABLE :: iadrcp ! dim = NSPMD+1
179 integer, dimension(:,:) , allocatable :: fr_nbcc ! dim = 2,NSPMD
180 integer, DIMENSION(:) , ALLOCATABLE :: fr_elem_s
181 integer, DIMENSION(:) , ALLOCATABLE :: fr_elem_r
182! --------------------------------
183 END TYPE nlocal_str_
184 CONTAINS
185c=======================================================================
186c define routine GET_LEMAX to automatically determine the maximal element length
187c=======================================================================
188!||====================================================================
189!|| get_lemax ../common_source/modules/nlocal_reg_mod.F
190!||--- called by ------------------------------------------------------
191!|| hm_read_fail_gurson ../starter/source/materials/fail/gurson/hm_read_fail_gurson.F
192!|| hm_read_nonlocal ../starter/source/materials/nonlocal/hm_read_nonlocal.F
193!|| law104_upd ../starter/source/materials/mat/mat104/law104_upd.F
194!||====================================================================
195 SUBROUTINE get_lemax(LE_MAX,NLOC_LENGTH)
196#include "implicit_f.inc"
197 my_real, INTENT(IN) :: nloc_length
198 my_real, INTENT(OUT) :: le_max
199 le_max = sqrt(pi)*nloc_length/three
200 END SUBROUTINE get_lemax
201c=======================================================================
202c define routine GET_LENGTH to automatically determine the maximal element length
203c=======================================================================
204!||====================================================================
205!|| get_length ../common_source/modules/nlocal_reg_mod.F
206!||--- called by ------------------------------------------------------
207!|| hm_read_fail_gurson ../starter/source/materials/fail/gurson/hm_read_fail_gurson.F
208!|| hm_read_nonlocal ../starter/source/materials/nonlocal/hm_read_nonlocal.F
209!||====================================================================
210 SUBROUTINE get_length(NLOC_LENGTH,LE_MAX)
211#include "implicit_f.inc"
212 my_real, INTENT(IN) :: le_max
213 my_real, INTENT(OUT) :: nloc_length
214 nloc_length = three*le_max/sqrt(pi)
215 END SUBROUTINE get_length
216c=======================================================================
217 END MODULE nlocal_reg_mod
#define my_real
Definition cppsort.cpp:32
subroutine get_lemax(le_max, nloc_length)
subroutine get_length(nloc_length, le_max)