38
39
40
41 USE elbufdef_mod
45
46
47
48#include "implicit_f.inc"
49
50
51
52#include "param_c.inc"
53#include "com01_c.inc"
54#include "com04_c.inc"
55
56
57
58 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
59 TYPE (NLOCAL_STR_) , TARGET :: NLOC_DMG
60 INTEGER IPARG(NPARG,NGROUP),IXS(NIXS,*),IXC(NIXC,*),IXTG(NIXTG,*),
61 . IPM(NPROPMI,*)
62 my_real ,
DIMENSION(NUMELC+NUMELTG),
INTENT(IN) ::
65 . x(3,*),xrefc(4,3,*),xreftg(3,3,*),xrefs(8,3,*),bufmat(*)
66
67
68
69 LOGICAL :: CONVERGED,FAILURE
70 INTEGER :: L_NLOC,NG,ILOC,NEL,NFT,ITY,FORMU
72 . dt_nl,time,norm_1,
norm,d
74 . PARAMETER :: tol1 = 5.0d-4
76 . PARAMETER :: tol2 = 1.0d-8
78 . DIMENSION(:), POINTER :: fnl,unl,vnl,dnl,mnl
79
80
81 converged = .false.
82
83 failure = .false.
84
85 l_nloc = nloc_dmg%L_NLOC
86
87 fnl => nloc_dmg%FNL(1:l_nloc,1)
88 vnl => nloc_dmg%VNL(1:l_nloc)
89 dnl => nloc_dmg%DNL(1:l_nloc)
90 unl => nloc_dmg%UNL(1:l_nloc)
91 mnl => nloc_dmg%MASS(1:l_nloc)
92
93 dt_nl = hundred
94 fnl = zero
95 vnl = zero
96 dnl = zero
97 unl = zero
98 time = zero
99
100 DO WHILE (.NOT.converged)
101
102 DO ng = 1,ngroup
103
104 iloc = iparg(78,ng)
105
106 IF (iloc>0) THEN
107
108 nel = iparg(2,ng)
109
110 nft = iparg(3,ng)
111
112 ity = iparg(5,ng)
113
114 formu = iparg(23,ng)
115
116 IF (ity == 3) THEN
117 IF ((formu>10).AND.(formu<29)) THEN
119 . dt_nl ,x ,xrefc ,nft ,
120 . nel ,ng ,ipm ,bufmat ,
121 . time ,failure )
122 ELSE
124 . dt_nl ,x ,xrefc ,nft ,
125 . nel ,ng ,ipm ,bufmat ,
126 . time ,failure )
127 ENDIF
128 ELSEIF (ity == 7) THEN
129 IF ((formu==1).OR.(formu==2)) THEN
131 . dt_nl ,x ,xreftg ,nft ,
132 . nel ,ng ,ipm ,bufmat ,
133 . time ,failure )
134 ELSEIF ((formu==30).OR.(formu==31)) THEN
136 . dt_nl ,x ,xreftg ,nft ,
137 . nel ,ng ,ipm ,bufmat ,
138 . time ,failure )
139 ENDIF
140 ENDIF
141 ENDIF
142 ENDDO
143
144 fnl = fnl / mnl
145
146 vnl = vnl + dt_nl*fnl
147
148 fnl = zero
149
150 norm_1 = sqrt(dot_product(dnl,dnl))
151
152 dnl = dt_nl*vnl
153
154 norm = sqrt(dot_product(dnl,dnl))
155
156 unl = unl + dnl
157
158 converged = ((
norm<tol1).AND.(abs(
norm-norm_1)<tol2).AND.(time/=zero))
159 d = (sqrt(dot_product(dnl,dnl)))
160 IF (d .NE. d) THEN
161 CALL ancmsg(msgid=1765,msgtype=msgerror,
162 . anmode=aninfo_blind_1)
163 EXIT
164 ENDIF
165
166 time = time + dt_nl
167 ENDDO
168
169 fnl = zero
170 vnl = zero
171 dnl = zero
172
173 IF (failure) THEN
174 CALL ancmsg(msgid=1767,msgtype=msgwarning,
175 . anmode=aninfo_blind_1)
176 ENDIF
177
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)