45 2 IPARTSP ,IPM ,IGEO ,KXSP ,IXSP ,
46 3 NOD2SP, RESERVEP ,IXS ,IPARTS ,ISOLNOD ,
47 4 SPH2SOL ,SOL2SPH ,IRST ,X ,SOL2SPH_TYP,
48 5 LSUBMODEL,SPBUF ,UNITAB,IPRI )
89 USE reader_old_mod ,
ONLY : line, kcur, ksphopt, irec, koptad
90 USE user_id_mod ,
ONLY : id_limit
94#include "implicit_f.inc"
100#include "units_c.inc"
102#include "scr17_c.inc"
103#include "param_c.inc"
107 INTEGER KXSP(NISP,*),IXSP(KVOISPH,*),
108 . NOD2SP(*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
109 . ITAB(*),ITABM1(*),IPART(LIPART1,*),IPARTSP(*),
110 . RESERVEP(), IXS(NIXS,*), IPARTS(*), ISOLNOD(*),
111 . sph2sol(*), sol2sph(2,*), irst(3,nsphsol),sol2sph_typ(*)
114 my_real,
INTENT(INOUT) :: SPBUF(NSPBUF,NUMSPH)
115 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
116 INTEGER,
INTENT(IN) :: IPRI
127 CHARACTER(LEN=NCHARKEY) ::
131 INTEGER :: MID_SPH,MID_SOL
132 INTEGER :: LAW_SPH,LAW_SOL
134 INTEGER :: I1,I2,I3,I4,I5
135 CHARACTER(LEN=NCHARTITLE) :: C1
136 CHARACTER(LEN=NCHARTITLE) :: TITR
137 INTEGER :: USER_PART_SPH,USER_PART_SOL
138 INTEGER :: USER_MID_SPH,USER_MID_SOL
139 LOGICAL,
DIMENSION(NPART) :: TAG_PART
140 INTEGER,
DIMENSION(NPART) :: PART_ID_SPH,PART_ID_SOL
141 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SUB_SPH
142 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TYPE
143 real*8,
DIMENSION(:),
ALLOCATABLE :: hm_mass
144 INTEGER,
DIMENSION(:),
ALLOCATABLE :: UID_SPH
145 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAG
151 MESS /
'SPH CONNECTIVITIES DEFINITION '/
156 CALL my_alloc(itag,numnod)
157 ALLOCATE (sub_sph(numsph),stat=stat)
158 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
161 ALLOCATE (uid_sph(numsph),stat=stat)
162 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
165 ALLOCATE (
TYPE(numsph),STAT=stat)
166 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
169 ALLOCATE (hm_mass(numsph),stat=stat)
170 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
173 sub_sph(1:numsph) = 0
174 uid_sph(1:numsph) = 0
175 hm_mass(1:numsph) = zero
183 CALL cpp_sphcel_read(kxsp,nisp,ipartsp,sub_sph,
TYPE,hm_mass,uid_sph)
195 IF(sub_sph(i) /= 0)
THEN
196 IF(uid_sph(i) == 0 .AND. lsubmodel(sub_sph(i))%UID /= 0)
197 . uid_sph(i) = lsubmodel(sub_sph(i))%UID
203 IF(uid_sph(i) /= uid )
THEN
207 IF (unitab%UNIT_ID(j) == uid)
THEN
208 fac_m = unitab%FAC_M(j)
212 IF (uid/=0.AND.iflagunit==0)
THEN
213 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,
214 . i1=uid,c1=
'/SPHCELL')
217 hm_mass(i) = hm_mass(i) * fac_m
221 IF ((
TYPE(i)==0).AND.(hm_mass(i) > zero))
THEN
225 spbuf(13,i) =
TYPE(i)
229 IF( ipart(4,index_part) /= ipartsp(i) )
THEN
231 IF(ipart(4,j)== ipartsp(i) ) index_part = j
234 IF(ipart(4,index_part) /= ipartsp(i))
THEN
237 . anmode=aninfo_blind_1,
244 inod=
usr2sys(idnod,itabm1,mess,id)
247 ipartsp(ncell)=index_part
250 kxsp(nisp,ncell)=idnod
251 idmax=
max(idmax,idnod)
253 IF (kxsp(nisp,i)>id_limit%GLOBAL)
THEN
254 CALL ancmsg(msgid=509,anmode=aninfo,msgtype=msgerror,
255 . i1=kxsp(nisp,i),c1=line,c2=
'/SPHCEL')
259 IF(
ALLOCATED(sub_sph))
DEALLOCATE(sub_sph)
260 IF(
ALLOCATED(uid_sph))
DEALLOCATE(uid_sph)
261 IF(
ALLOCATED(type))
DEALLOCATE(type)
262 IF(
ALLOCATED(hm_mass))
DEALLOCATE(hm_mass)
278 IF(ipart(4,j)==id)
THEN
279 IF(igeo(11,ipart(2,j))/=34)
THEN
297 CALL hm_get_intv(
'Np',ksphres,is_available,lsubmodel)
300 nsphres = nsphres - ksphres*nspmd
301 numsph = numsph - ksphres*nspmd
305 reservep(nbp)=ksphres
308 ksphres = ksphres*nspmd
317 kxsp(nisp,ncell)=idmax
327 inod =firstnod_sphsol-1
331 ipids =ipart(2,iparts(n))
332 nsphdir=igeo(37,ipids)
335 IF(isolnod(n)==8)
THEN
341 IF(itag(ixs(1+j,n))==0)
THEN
356 np=nsphdir*nsphdir*nsphdir
358 ELSEIF(isolnod(n)==6)
THEN
366 ELSEIF(isolnod(n)==4)
THEN
378 sol2sph(2,n)=ncell+np
386 CALL soltosphx4(nsphdir,ncell ,inod ,ids ,idmax ,
387 . x ,ixs(1,n),kxsp ,ipartsp,nod2sp ,
389 ELSEIF (itopo==8)
THEN
391 CALL soltosphx8(nsphdir,ncell ,inod ,ids ,idmax ,
392 . x ,ixs(1,n),kxsp ,ipartsp,nod2sp ,
398! ------------------------------------
403 tag_part(1:npart) = .false.
408 mid_sph = ipart(1,ipartsp(i))
409 mid_sol = ipart(1,iparts(n))
410 law_sph = ipm(2,mid_sph)
411 law_sol = ipm(2,mid_sol)
412 IF(law_sph/=law_sol)
THEN
414 IF( .NOT.tag_part(ipartsp(i)) )
THEN
415 error_num = error_num + 1
416 tag_part(ipartsp(i)) = .true.
417 part_id_sph(error_num) = ipartsp(i)
418 part_id_sol(error_num) = iparts(n)
428 CALL fretitl2(titr,ipart(lipart1-ltitr+1,part_id_sph(i)),ltitr-1)
429 user_part_sph = ipart(4,part_id_sph(i))
430 user_part_sol = ipart(4,part_id_sol(i))
431 user_mid_sph = ipart(5,part_id_sph(i))
432 user_mid_sol = ipart(5,part_id_sol(i))
436 . i1=user_part_sph,c1=titr(1:len_trim(titr)),
437 . i2=user_mid_sph,i3=user_part_sph,
438 . i4=user_mid_sol,i5=user_part_sol )
444 CALL udouble(kxsp(nisp,1),nisp,numsph,mess,0,bid)
455 mid =ipm(1,ipart(1,iprt))
456 pid =igeo(1,ipart(2,iprt))
457 WRITE (iout,
'(6(I10,1X))') i,kxsp(nisp,i),mid,pid,
458 . kxsp(3,i),itab(kxsp
460 IF(i2==numsph)
GOTO 200
462 i2=min0(i2+50,numsph)
466 WRITE (iout,
'(A)')
'END OF CELL TRACEBACK'
471 300
FORMAT(/
' SPH CELLS '/
472 +
' ----------------------'/
473 +
' LOC-CEL GLO-CEL MATER ',
474 +
' GEOM LOC-NOD GLO-NOD ')
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)