32 . CEL ,CEP ,PROC ,IXS ,
33 . IXC ,IXTG ,NUMELS_L ,NUMELC_L ,
43#include "implicit_f.inc"
50 INTEGER ,
INTENT(IN) :: NUMNOD_L, CEL(*), CEP(*),
51 . IXS(NIXS,*),PROC,IXC(NIXC,*),
52 . IXTG(NIXTG,*),NUMELS_L,NUMELC_L,
54 INTEGER ,
DIMENSION(NUMNOD_L) ,
INTENT(IN) :: NODGLOB
55 INTEGER ,
DIMENSION(NUMNOD) ,
INTENT(IN) :: NODLOC
56 TYPE (NLOCAL_STR_) :: NLOC_DMG
60 INTEGER I,ILOC,NNOD,NNOD_L,NG,NL,NN, LNLOC_L,ND,NP,NM,N1,
61 . N2,NNO,CC,CC_L,NUMG,NUML,PROC_L,K,SHFT,TESTVAL,
62 . L_NLOC,NDDMAX_L,OFF,LENBIS,LCNENL_L,MATSIZE
63 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDX_L, NDDL, IDXI_L
64 INTEGER,
DIMENSION(:),
ALLOCATABLE :: POSI
65 my_real,
DIMENSION(NLOC_DMG%L_NLOC) :: MASS,UNL,MASS0
66 my_real,
DIMENSION(:),
ALLOCATABLE :: zero_vec
67 INTEGER,
DIMENSION(8) :: HEAD
68 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ADDCNE_L,SOLTAG,SHTAG,TGTAG,
70 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IADS,IADC,IADTG
72 CALL my_alloc(indx_l,numnod_l)
73 CALL my_alloc(nddl,numnod_l)
74 CALL my_alloc(idxi_l,numnod_l)
75 CALL my_alloc(posi,numnod_l+1)
91 l_nloc = nloc_dmg%L_NLOC
96 indx_l(1:numnod_l) = 0
97 idxi_l(1:numnod_l) = 0
99 posi(1:numnod_l+1) = 0
100 mass(1:nloc_dmg%L_NLOC) = zero
101 mass0(1:nloc_dmg%L_NLOC) = zero
102 unl(1:nloc_dmg%L_NLOC) = zero
107 nn = nloc_dmg%IDXI(ng)
109 np = nloc_dmg%POSI(nn)
110 nd = nloc_dmg%POSI(nn+1) - np
115 posi(nnod_l) = lnloc_l + 1
116 mass(lnloc_l+1:lnloc_l+nd) = nloc_dmg%MASS(np:np+nd-1)
117 mass0(lnloc_l+1:lnloc_l+nd) = nloc_dmg%MASS0(np:np+nd-1)
118 unl(lnloc_l+1:lnloc_l+nd) = nloc_dmg%UNL(np:np+nd-1)
119 lnloc_l = lnloc_l + nd
122 posi(nnod_l + 1) = lnloc_l + 1
124 nddmax_l = maxval(nddl(1:nnod_l))
127 IF (ipari0 == 1)
THEN
134 nn = nloc_dmg%IDXI(ng)
135 n1 = nloc_dmg%ADDCNE(nn) ! number of
the position in
the fsky vector
136 n2 = nloc_dmg%ADDCNE(nn+1)
137 lcnenl_l = lcnenl_l + n2-n1
141 ALLOCATE(addcne_l(nnod_l + 1))
142 addcne_l(1:nnod_l + 1) = 0
143 ALLOCATE(procne_l(lcnenl_l))
144 procne_l(1:lcnenl_l) = 0
145 ALLOCATE(iads(8,numels_l))
146 iads(1:8,1:numels_l) = 0
147 ALLOCATE(iadc(4,numelc_l))
148 iadc(1:4,1:numelc_l) = 0
149 ALLOCATE(iadtg(3,numeltg_l))
150 iadtg(1:3,1:numeltg_l) = 0
151 ALLOCATE(soltag(numels))
153 ALLOCATE(shtag(numelc))
155 ALLOCATE(tgtag(numeltg))
166 nn = nloc_dmg%IDXI(ng)
167 n1 = nloc_dmg%ADDCNE(nn)
168 n2 = nloc_dmg%ADDCNE(nn+1)
169 addcne_l(i+1) = addcne_l(i)
171 numg = nloc_dmg%CNE(cc)
175 procne_l(cc_l) = proc_l
176 IF (proc==proc_l)
THEN
177 IF (numg<=numels)
THEN
180 testval = iand(soltag(numg),shft)
181 IF (ixs(k+1,numg)==ng.AND.testval==0)
THEN
183 soltag(numg) = soltag(numg)+shft
186 ELSEIF (numg<=numels+numelq)
THEN
188 WRITE(*,*)
"Error in non-local decomp"
189 WRITE(*,*)
"Quad element error"
191 ELSEIF (numg<=numels+numelq+numelc)
THEN
192 numg = numg - (numels+numelq)
195 testval = iand(shtag(numg),shft)
197 IF (ixc(k+1,numg)==ng.AND.testval==0)
THEN
199 shtag(numg) = shtag(numg)+shft
202 ELSEIF (numg<=numels+numelq+numelc+numelt)
THEN
204 WRITE(*,*)
"Error in non-local decomp"
205 WRITE(*,*)
"Truss element error"
207 ELSEIF (numg<=numels+numelq+numelc+numelt+numelp)
THEN
209 WRITE(*,*)
"Error in non-local decomp"
210 WRITE(*,*)
"Poutre element error"
212 ELSEIF (numg<=numels+numelq+numelc+numelt+numelp+numelr)
THEN
214 WRITE(*,*)
"Error in non-local decomp"
215 WRITE(*,*)
"Ressort element error"
217 ELSEIF (numg<=numels+numelq+numelc+numelt+numelp+
218 . numelr+numeltg)
THEN
219 numg = numg - (numels+numelq+numelc+numelt+numelp+numelr)
222 testval = iand(tgtag(numg),shft)
223 IF (ixtg(k+1,numg)==ng.AND.testval==0)
THEN
225 tgtag(numg) = tgtag(numg)+shft
230 WRITE(*,*)
"Error in non-local decomp"
247 IF (nsubdom > 0)
THEN
256 CALL write_db(nloc_dmg%DENS,matsize)
258 CALL write_db(nloc_dmg%DAMP,matsize)
262 CALL write_db(nloc_dmg%LE_MAX,matsize)
264 CALL write_db(nloc_dmg%SSPNL,matsize)
273 IF (ipari0 == 1)
THEN
291 IF (.NOT.
ALLOCATED(zero_vec))
ALLOCATE(zero_vec(4*lnloc_l))
292 zero_vec(1:4*lnloc_l) = zero
298 IF (
ALLOCATED(soltag))
DEALLOCATE(soltag)
299 IF (
ALLOCATED(shtag))
DEALLOCATE(shtag)
300 IF (
ALLOCATED(tgtag))
DEALLOCATE(tgtag)
301 IF (
ALLOCATED(addcne_l))
DEALLOCATE(addcne_l)
302 IF (
ALLOCATED(procne_l))
DEALLOCATE(procne_l)
303 IF (
ALLOCATED(iads))
DEALLOCATE(iads)
304 IF (
ALLOCATED(iadc))
DEALLOCATE(iadc)
305 IF (
ALLOCATED(iadtg))
DEALLOCATE(iadtg)
306 IF (
ALLOCATED(zero_vec))
DEALLOCATE(zero_vec)