38
39
40
41 USE elbufdef_mod
45 use element_mod , only : nixs,nixc,nixtg
46
47
48
49#include "implicit_f.inc"
50
51
52
53#include "param_c.inc"
54#include "com01_c.inc"
55#include "com04_c.inc"
56
57
58
59 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
60 TYPE (NLOCAL_STR_) , TARGET :: NLOC_DMG
61 INTEGER IPARG(NPARG,NGROUP),IXS(NIXS,*),IXC(NIXC,*),IXTG(NIXTG,*),
62 . IPM(NPROPMI,*)
63 my_real ,
DIMENSION(NUMELC+NUMELTG),
INTENT(IN) ::
66 . x(3,*),xrefc(4,3,*),xreftg(3,3,*),xrefs(8,3,*),bufmat(*
67
68
69
70 LOGICAL :: CONVERGED,FAILURE
71 INTEGER :: L_NLOC,NG,ILOC,NEL,NFT,ITY,FORMU
73 . dt_nl,time,norm_1,
norm,d
75 . PARAMETER :: tol1 = 5.0d-4
77 . PARAMETER :: tol2 = 1.0d-8
79 . DIMENSION(:), POINTER :: fnl,unl,vnl,dnl,mnl
80
81
82 converged = .false.
83
84 failure = .false.
85
86 l_nloc = nloc_dmg%L_NLOC
87
88 fnl => nloc_dmg%FNL(1:l_nloc,1)
89 vnl => nloc_dmg%VNL(1:l_nloc)
90 dnl => nloc_dmg%DNL(1:l_nloc)
91 unl => nloc_dmg%UNL(1:l_nloc)
92 mnl => nloc_dmg%MASS(1:l_nloc)
93
94 dt_nl = hundred
95 fnl = zero
96 vnl = zero
97 dnl = zero
98 unl = zero
99 time = zero
100
101 DO WHILE (.NOT.converged)
102
103 DO ng = 1,ngroup
104
105 iloc = iparg(78,ng)
106
107 IF (iloc>0) THEN
108
109 nel = iparg(2,ng)
110
111 nft = iparg(3,ng)
112
113 ity = iparg(5,ng)
114
115 formu = iparg(23,ng)
116
117 IF (ity == 3) THEN
118 IF ((formu>10).AND.(formu<29)) THEN
120 . dt_nl ,x ,xrefc ,nft ,
121 . nel ,ng ,ipm ,bufmat ,
122 . time ,failure )
123 ELSE
125 . dt_nl ,x ,xrefc ,nft ,
126 . nel ,ng ,ipm ,bufmat ,
127 . time ,failure )
128 ENDIF
129 ELSEIF (ity == 7) THEN
130 IF ((formu==1).OR.(formu==2)) THEN
132 . dt_nl ,x ,xreftg ,nft ,
133 . nel ,ng ,ipm ,bufmat ,
134 . time ,failure )
135 ELSEIF ((formu==30).OR.(formu==31)) THEN
137 . dt_nl ,x ,xreftg ,nft ,
138 . nel ,ng ,ipm ,bufmat ,
139 . time ,failure )
140 ENDIF
141 ENDIF
142 ENDIF
143 ENDDO
144
145 fnl = fnl / mnl
146
147 vnl = vnl + dt_nl*fnl
148
149 fnl = zero
150
151 norm_1 = sqrt(dot_product(dnl,dnl))
152
153 dnl = dt_nl*vnl
154
155 norm = sqrt(dot_product(dnl,dnl))
156
157 unl = unl + dnl
158
159 converged = ((
norm<tol1).AND.(abs(
norm-norm_1)<tol2).AND.(time/=zero))
160 d = (sqrt(dot_product(dnl,dnl)))
161 IF (d .NE. d) THEN
162 CALL ancmsg(msgid=1765,msgtype=msgerror,
163 . anmode=aninfo_blind_1)
164 EXIT
165 ENDIF
166
167 time = time + dt_nl
168 ENDDO
169
170 fnl = zero
171 vnl = zero
172 dnl = zero
173
174 IF (failure) THEN
175 CALL ancmsg(msgid=1767,msgtype=msgwarning,
176 . anmode=aninfo_blind_1)
177 ENDIF
178
subroutine c3fint_reg_ini(elbuf_tab, nloc_dmg, area, ixtg, dt_nl, x, xreftg, nft, nel, ng, ipm, bufmat, time, failure)
subroutine cbafint_reg_ini(elbuf_tab, nloc_dmg, area, ixc, dt_nl, x, xrefc, nft, nel, ng, ipm, bufmat, time, failure)
subroutine cdkfint_reg_ini(elbuf_tab, nloc_dmg, area, ixtg, dt_nl, x, xreftg, nft, nel, ng, ipm, bufmat, time, failure)
subroutine cfint_reg_ini(elbuf_tab, nloc_dmg, area, ixc, dt_nl, x, xrefc, nft, nel, ng, ipm, bufmat, time, failure)
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)