56 USE user_id_mod ,
ONLY : id_limit
60#include "implicit_f.inc"
73 INTEGER I,CUR_SUBMOD,ISUB_HIERARCHY,ISUBSKEW,STAT
74 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NOSUBMOD,IFATHER,LEVEL,UID_SUB
75 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: OFFSETS
76 INTEGER NB_BEGIN,SCHAR,SUB_INDEX,NBUNIT_SUB
77 LOGICAL :: IS_AVAILABLE
83 ALLOCATE (nosubmod(
nsubmod),stat=stat)
84 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
87 ALLOCATE (ifather(
nsubmod),stat=stat)
88 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
91 ALLOCATE (level(
nsubmod),stat=stat)
92 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
95 ALLOCATE (offsets(7,
nsubmod),stat=stat)
96 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
100 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
106 lsubmodel(1:
nsubmod)%NOSUBMOD=0
114 ALLOCATE (nosubmod(0),stat=stat)
115 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
118 ALLOCATE (ifather(0),stat=stat)
119 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
122 ALLOCATE (level(0),stat=stat)
123 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
126 ALLOCATE (offsets(0,0),stat=stat)
127 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
130 ALLOCATE (uid_sub(0),stat=stat)
131 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
136 IF(
nsubmod > 0)
CALL cpp_submodel_build(ifather,nosubmod,level,offsets,uid_sub)
139 lsubmodel(i)%IFATHER = ifather(i)
140 lsubmodel(i)%NOSUBMOD = nosubmod(i)
141 lsubmodel(i)%LEVEL = level(i)
142 lsubmodel(i)%UID = uid_sub(i)
143 lsubmodel(i)%OFF_DEF = offsets(1,i)
144 lsubmodel(i)%OFF_NOD = offsets(2,i)
145 lsubmodel(i)%OFF_EL = offsets(3,i)
146 lsubmodel(i)%OFF_PART = offsets(4,i)
147 lsubmodel(i)%OFF_MAT = offsets(5,i)
148 lsubmodel(i)%OFF_PROP = offsets(6,i)
149 lsubmodel(i)%OFF_SUBMOD = offsets(7,i)
152 isubskew = 1000000000
154 isubskew = isubskew + 1
155 IF (lsubmodel(i)%SKEW == 0) lsubmodel(i)%SKEW = isubskew
160 DO WHILE (lsubmodel(cur_submod)%IFATHER /= 0)
161 cur_submod = lsubmodel(cur_submod)%IFATHER
162 lsubmodel(i)%LEVEL = lsubmodel(i)%LEVEL + 1
171 IF (nb_begin /= 0)
THEN
175 . submodel_index = sub_index)
176 IF (sub_index /= 0)
THEN
177 nbunit_sub = nbunit_sub + 1
178 lsubmodel(sub_index)%UID = id_limit%UNIT + nbunit_sub
192 IF (
ALLOCATED(nosubmod))
DEALLOCATE(nosubmod)
193 IF (
ALLOCATED(ifather))
DEALLOCATE(ifather)
194 IF (
ALLOCATED(level))
DEALLOCATE(level)
195 IF (
ALLOCATED(offsets))
DEALLOCATE(offsets)
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)