OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
create_subm_clause.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| create_subm_clause ../starter/source/model/sets/create_subm_clause.F
25!||--- called by ------------------------------------------------------
26!|| hm_set ../starter/source/model/sets/hm_set.F
27!||--- calls -----------------------------------------------------
28!|| create_subm_list ../starter/source/model/sets/create_subm_clause.F
29!|| create_subm_list_g ../starter/source/model/sets/create_subm_clause.F
30!||--- uses -----------------------------------------------------
31!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
32!|| message_mod ../starter/share/message_module/message_mod.F
33!|| submodel_mod ../starter/share/modules1/submodel_mod.F
34!||====================================================================
36 . CLAUSE ,ISUBMM ,JCLAUSE ,OPT_G ,IS_AVAILABLE ,
37 . LSUBMODEL,IPART )
38C-----------------------------------------------
39C ROUTINE DESCRIPTION :
40C ===================
41C Treat the PART Clause, read PARTs from HM_READER & fill clause
42C Calls CREATE_PART_LIST (simple list)
43C Calls CREATE_PART_LIST_G (PART_G : All parts from a MIN to MAX with increment)
44C------------------------------------------------------------------
45C DUMMY ARGUMENTS DESCRIPTION:
46C ===================
47C
48C NAME DESCRIPTION
49C
50C CLAUSE (SET structure) Clause to be treated
51C ISUBSM MAP Table UID -> LocalID
52C JCLAUSE parameter with HM_READER (current clause read)
53C Opt_G Opt_G operator 1 if PART_G is set, 0 else
54C IS_AVAILABLE Bool / Result of HM_interface
55C LSUBMODEL SUBMODEL Structure.
56C============================================================================
57C-----------------------------------------------
58C M o d u l e s
59C-----------------------------------------------
60 USE setdef_mod
61 USE submodel_mod
62 USE message_mod
64C-----------------------------------------------
65C I m p l i c i t T y p e s
66C-----------------------------------------------
67#include "implicit_f.inc"
68C-----------------------------------------------
69C C o m m o n B l o c k s
70C-----------------------------------------------
71#include "com04_c.inc"
72#include "scr17_c.inc"
73C-----------------------------------------------
74C D u m m y A r g u m e n t s
75C-----------------------------------------------
76 INTEGER JCLAUSE,OPT_G
77 LOGICAL :: IS_AVAILABLE
78 INTEGER, INTENT(IN), DIMENSION(NSUBMOD,2) :: ISUBMM
79 INTEGER IPART(LIPART1,NPART)
80C-----------------------------------------------
81 TYPE (SET_) :: CLAUSE
82 TYPE(SUBMODEL_DATA),INTENT(IN):: LSUBMODEL(*)
83C-----------------------------------------------
84C L o c a l V a r i a b l e s
85C-----------------------------------------------
86!
87 IF (opt_g == 1 ) THEN
88 CALL create_subm_list_g(clause, isubmm ,jclause ,is_available ,lsubmodel,
89 . ipart )
90 ELSE
91 CALL create_subm_list (clause, isubmm ,jclause ,is_available ,lsubmodel,
92 . ipart )
93 ENDIF
94C-----------------------------------------------
95 END
96!||====================================================================
97!|| create_subm_list ../starter/source/model/sets/create_subm_clause.F
98!||--- called by ------------------------------------------------------
99!|| create_subm_clause ../starter/source/model/sets/create_subm_clause.f
100!||--- calls -----------------------------------------------------
101!|| ancmsg ../starter/source/output/message/message.F
102!|| hm_get_int_array_2indexes ../starter/source/devtools/hm_reader/hm_get_int_array_2indexes.F
103!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.f
104!|| set_usrtos ../starter/source/model/sets/ipartm1.F
105!||--- uses -----------------------------------------------------
106!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
107!|| message_mod ../starter/share/message_module/message_mod.F
108!|| submodel_mod ../starter/share/modules1/submodel_mod.F
109!||====================================================================
111 . CLAUSE, ISUBMM ,JCLAUSE ,IS_AVAILABLE ,LSUBMODEL,
112 . IPART )
113C-----------------------------------------------
114C ROUTINE DESCRIPTION :
115C ===================
116C Create PART Clause from LIST
117C------------------------------------------------------------------
118C DUMMY ARGUMENTS DESCRIPTION:
119C ===================
120C
121C NAME DESCRIPTION
122C
123C CLAUSE (SET structure) Clause to be treated
124C ISUBSM MAP Table UID -> LocalID
125C JCLAUSE parameter with HM_READER (current clause read)
126C IS_AVAILABLE Bool / Result of HM_interface
127C LSUBMODEL SUBMODEL Structure.
128C============================================================================
129C-----------------------------------------------
130C M o d u l e s
131C-----------------------------------------------
132 USE setdef_mod
133 USE submodel_mod
134 USE message_mod
136C-----------------------------------------------
137C I m p l i c i t T y p e s
138C-----------------------------------------------
139#include "implicit_f.inc"
140C-----------------------------------------------
141C C o m m o n B l o c k s
142C-----------------------------------------------
143#include "com04_c.inc"
144#include "scr17_c.inc"
145C-----------------------------------------------
146C D u m m y A r g u m e n t s
147C-----------------------------------------------
148 INTEGER JCLAUSE
149 LOGICAL :: IS_AVAILABLE
150 INTEGER, INTENT(IN), DIMENSION(NSUBMOD,2) :: ISUBMM
151 INTEGER IPART(LIPART1,NPART)
152!
153 TYPE (SET_) :: CLAUSE
154 TYPE(submodel_data),INTENT(IN):: LSUBMODEL(*)
155C-----------------------------------------------
156C L o c a l V a r i a b l e s
157C-----------------------------------------------
158 INTEGER I,J,IDS,NINDX,LIST_SIZE,IDS_MAX,SUBMM,PARTM,ISUB,IP,SUB_INDEX,
159 . LIST_SIZE_S,LIST_SIZE_P,LIST_SIZE_N,NODE
160 INTEGER IWORK(70000)
161!
162 INTEGER, ALLOCATABLE, DIMENSION(:) :: SUBM_READ_TMP,SORTED_SUBM,INDEXS,
163 . PART_READ_TMP,SORTED_PARTS,INDEXP,TAGNODSUB,NODE_READ_TMP,SORTED_NODES,INDEXN
164C
165 INTEGER SET_USRTOS
166 EXTERNAL set_usrtos
167C=======================================================================
168
169 CALL hm_get_int_array_index('idsmax' ,ids_max ,jclause,is_available,lsubmodel)
170
171 ALLOCATE(subm_read_tmp(ids_max))
172 ALLOCATE(sorted_subm(ids_max))
173
174 ALLOCATE(part_read_tmp(npart))
175 ALLOCATE(sorted_parts(npart))
176
177 ALLOCATE(indexs(2*ids_max)) ! subsets
178 indexs = 0
179
180 ALLOCATE(indexp(2*npart)) ! parts of subsets
181 indexp = 0
182
183 ALLOCATE(tagnodsub(numnod))
184
185 ALLOCATE(node_read_tmp(numnod))
186!! ALLOCATE(SORTED_NODES(NUMNOD))
187!! ALLOCATE(INDEXN(2*NUMNOD)) ! nodes of subsets
188!! INDEXN = 0
189
190
191 nindx = 0
192 list_size_s = 0
193 list_size_p = 0
194 list_size_n = 0
195
196 ! Read & convert Subsets
197 ! ---------------------
198 DO i=1,ids_max
199 CALL hm_get_int_array_2indexes('ids',IDS,JCLAUSE,I,IS_AVAILABLE,LSUBMODEL)
200
201 SUBMM = SET_USRTOS(IDS,ISUBMM,NSUBMOD)
202 IF(SUBMM == 0)THEN
203 ! Submodel was not found. Issue a Warning & Skip.
204 CALL ANCMSG(MSGID=1902,ANMODE=ANINFO,
205 . MSGTYPE=MSGWARNING,
206 . I1 = CLAUSE%SET_ID,
207 . I2=IDS,
208 . C1=TRIM(CLAUSE%TITLE),
209 . C2='submodel')
210 ELSE
211
212 SUBMM=ISUBMM(SUBMM,2)
213
214 NINDX=NINDX+1 ! nb of CLAUSE submodels
215 SUBM_READ_TMP(NINDX) = SUBMM
216 ENDIF
217
218 ENDDO ! DO K=1,IDS_MAX
219
220
221 ! Sort the Readed SUBSETs and remove eventual duplicates
222 ! ----------------------------------------------------
223
224 IWORK(:) = 0
225 DO I=1,NINDX
226 INDEXS(I) = I
227 ENDDO
228 CALL MY_ORDERS(0,IWORK,SUBM_READ_TMP,INDEXS,NINDX,1)
229
230 DO I=1,NINDX
231 SORTED_SUBM(I) = SUBM_READ_TMP(INDEXS(I))
232 ENDDO
233
234 CALL REMOVE_DUPLICATES(SORTED_SUBM,NINDX,LIST_SIZE_S)
235
236
237 ! TAG Parts from Readed SUBSETs
238 ! ----------------------------------------------------
239
240 NINDX = 0
241 DO I=1,LIST_SIZE_S
242 ISUB = SORTED_SUBM(I)
243 DO IP=1,NPART
244 SUB_INDEX = IPART(9,IP)
245 IF (ISUB == SUB_INDEX) THEN
246
247 PARTM = IP
248
249 NINDX=NINDX+1 ! nb of Parts of CLAUSE subsets
250 PART_READ_TMP(NINDX) = PARTM
251
252 ENDIF
253 ENDDO
254 ENDDO
255
256
257 ! Sort of TAG Parts from Readed SUBMODELs and remove eventual duplicates
258 ! ----------------------------------------------------
259
260 IWORK(:) = 0
261 DO I=1,NINDX
262 INDEXP(I) = I
263 ENDDO
264 CALL MY_ORDERS(0,IWORK,PART_READ_TMP,INDEXP,NINDX,1)
265
266 DO I=1,NINDX
267 SORTED_PARTS(I) = PART_READ_TMP(INDEXP(I))
268 ENDDO
269
270 LIST_SIZE_P = 0
271 CALL REMOVE_DUPLICATES(SORTED_PARTS,NINDX,LIST_SIZE_P)
272
273
274 ! Copy in final SET
275 ! ------------------
276 CLAUSE%NB_PART = LIST_SIZE_P
277 ALLOCATE( CLAUSE%PART( LIST_SIZE_P ) )
278
279 DO I=1,LIST_SIZE_P
280 CLAUSE%PART(I) = SORTED_PARTS(I)
281 ENDDO
282!---
283
284
285 ! Tag & convert Nodes of Submodel
286 ! ---------------------
287 CALL CPP_NODE_SUB_TAG(TAGNODSUB)
288
289
290 NINDX = 0
291 DO I=1,LIST_SIZE_S
292 ISUB = SORTED_SUBM(I)
293 DO J=1,NUMNOD
294 SUB_INDEX = TAGNODSUB(J)
295 IF (ISUB == SUB_INDEX) THEN
296
297 NODE = J
298
299 NINDX=NINDX+1 ! nb of Nodes of CLAUSE subsets
300 NODE_READ_TMP(NINDX) = NODE
301
302 ENDIF
303 ENDDO
304 ENDDO
305
306
307 ! Sort of TAG Nodes from Readed SUBMODELs and remove eventual duplicates
308 ! ----------------------------------------------------
309
310 ALLOCATE(SORTED_NODES(NINDX))
311 ALLOCATE(INDEXN(2*NINDX))
312 INDEXN = 0
313
314 IWORK(:) = 0
315 DO I=1,NINDX
316 INDEXN(I) = I
317 ENDDO
318 CALL MY_ORDERS(0,IWORK,NODE_READ_TMP,INDEXN,NINDX,1)
319
320 DO I=1,NINDX
321 SORTED_NODES(I) = NODE_READ_TMP(INDEXN(I))
322 ENDDO
323
324 LIST_SIZE_N = 0
325 CALL REMOVE_DUPLICATES(SORTED_NODES,NINDX,LIST_SIZE_N)
326
327
328 ! Copy in final SET
329 ! ------------------
330 CLAUSE%NB_NODE = LIST_SIZE_N
331 ALLOCATE( CLAUSE%NODE( LIST_SIZE_N ) )
332
333 DO I=1,LIST_SIZE_N
334 CLAUSE%NODE(I) = SORTED_NODES(I)
335 ENDDO
336
337C-------------------------
338 DEALLOCATE(SUBM_READ_TMP)
339 DEALLOCATE(SORTED_SUBM)
340 DEALLOCATE(INDEXS)
341 DEALLOCATE(PART_READ_TMP)
342 DEALLOCATE(SORTED_PARTS)
343 DEALLOCATE(INDEXP)
344 DEALLOCATE(TAGNODSUB)
345 DEALLOCATE(NODE_READ_TMP)
346 DEALLOCATE(SORTED_NODES)
347 DEALLOCATE(INDEXN)
348C-------------------------
349 RETURN
350 END
351!||====================================================================
352!|| create_subm_list_g ../starter/source/model/sets/create_subm_clause.F
353!||--- called by ------------------------------------------------------
354!|| create_subm_clause ../starter/source/model/sets/create_subm_clause.F
355!||--- calls -----------------------------------------------------
356!|| hm_get_int_array_2indexes ../starter/source/devtools/hm_reader/hm_get_int_array_2indexes.F
357!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.F
358!|| set_usrtos_nearest ../starter/source/model/sets/ipartm1.F
359!||--- uses -----------------------------------------------------
360!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
361!|| message_mod ../starter/share/message_module/message_mod.F
362!|| submodel_mod ../starter/share/modules1/submodel_mod.F
363!||====================================================================
364 SUBROUTINE CREATE_SUBM_LIST_G(
365 . CLAUSE, ISUBMM ,JCLAUSE ,IS_AVAILABLE ,LSUBMODEL,
366 . IPART )
367C-----------------------------------------------
368C ROUTINE DESCRIPTION :
369C ===================
370C Create PART Clause from Generation All parts from Min to Max with Increment (Opt_G)
371C--------------------------------------------------------------------------------------
372C DUMMY ARGUMENTS DESCRIPTION:
373C ===================
374C
375C NAME DESCRIPTION
376C
377C CLAUSE (SET structure) Clause to be treated
378C ISUBMM MAP Table UID -> LocalID
379C JCLAUSE parameter with HM_READER (current clause read)
380C IS_AVAILABLE Bool / Result of HM_interface
381C LSUBMODEL SUBMODEL Structure.
382C============================================================================
383C-----------------------------------------------
384C M o d u l e s
385C-----------------------------------------------
386 USE SETDEF_MOD
387 USE SUBMODEL_MOD
388 USE MESSAGE_MOD
389 USE HM_OPTION_READ_MOD
390C-----------------------------------------------
391C I m p l i c i t T y p e s
392C-----------------------------------------------
393#include "implicit_f.inc"
394C-----------------------------------------------
395C C o m m o n B l o c k s
396C-----------------------------------------------
397#include "com04_c.inc"
398#include "scr17_c.inc"
399C-----------------------------------------------
400C D u m m y A r g u m e n t s
401C-----------------------------------------------
402 INTEGER JCLAUSE
403 LOGICAL :: IS_AVAILABLE
404 INTEGER, INTENT(IN), DIMENSION(NSUBMOD,2) :: ISUBMM
405 INTEGER IPART(LIPART1,NPART)
406!
407 TYPE (SET_) :: CLAUSE
408 TYPE(SUBMODEL_DATA),INTENT(IN):: LSUBMODEL(*)
409C-----------------------------------------------
410C L o c a l V a r i a b l e s
411C-----------------------------------------------
412 INTEGER I,J,IDS,LIST_SIZE,IDS_MAX,PARTM,GENE_MAX,K,S,S1,
413 . NINDX,IP,ISUB,SUB_INDEX,NODE
414 INTEGER START_GENE,END_GENE,INCR_GENE,SSTART,SSTOP,STACK,STACK_ONE,NB_RESULT
415!-
416 INTEGER, ALLOCATABLE, DIMENSION(:) :: SUBM_READ_TMP,SUBM_READ_ONE,RESULT,
417 . PART_READ_TMP,SORTED_PARTS,INDEX,TAGNODSUB,NODE_READ_TMP,
418 . SORTED_NODES,INDEXN
419C
420 INTEGER SET_USRTOS_NEAREST
421 EXTERNAL SET_USRTOS_NEAREST
422 INTEGER IWORK(70000)
423C=======================================================================
424 CALL HM_GET_INT_ARRAY_INDEX('genemax' ,GENE_MAX ,JCLAUSE,IS_AVAILABLE,LSUBMODEL)
425
426 ALLOCATE(SUBM_READ_TMP(NSUBMOD))
427 ALLOCATE(SUBM_READ_ONE(NSUBMOD))
428
429 ALLOCATE(PART_READ_TMP(NPART))
430 ALLOCATE(SORTED_PARTS(NPART))
431
432 ALLOCATE(INDEX(2*NPART))
433 INDEX = 0
434
435 IF (GENE_MAX > 1) THEN
436 ALLOCATE(RESULT(NSUBMOD))
437 ENDIF
438
439 ALLOCATE(TAGNODSUB(NUMNOD))
440
441 ALLOCATE(NODE_READ_TMP(NUMNOD))
442!! ALLOCATE(SORTED_NODES(NUMNOD))
443!! ALLOCATE(INDEXN(2*NUMNOD)) ! nodes of subsets
444!! INDEXN = 0
445
446 STACK=0
447
448 DO K=1,GENE_MAX
449 CALL HM_GET_INT_ARRAY_2INDEXES('start' ,START_GENE,JCLAUSE,K,IS_AVAILABLE,LSUBMODEL)
450 CALL HM_GET_INT_ARRAY_2INDEXES('end' ,END_GENE ,JCLAUSE,K,IS_AVAILABLE,LSUBMODEL)
451 CALL HM_GET_INT_ARRAY_2INDEXES('by' ,INCR_GENE ,JCLAUSE,K,IS_AVAILABLE,LSUBMODEL)
452
453 SSTART = SET_USRTOS_NEAREST(START_GENE,ISUBMM,NSUBMOD,1)
454 SSTOP = SET_USRTOS_NEAREST(END_GENE,ISUBMM,NSUBMOD,2)
455
456 STACK_ONE=0
457
458 DO S=SSTART, SSTOP
459 S1 = ISUBMM(S,1)
460 IF ( MOD( S1-START_GENE , INCR_GENE) == 0 ) THEN
461 STACK_ONE = STACK_ONE+1
462 SUBM_READ_ONE(STACK_ONE) = ISUBMM(S,2)
463 ENDIF
464 ENDDO
465
466 IF (STACK==0) THEN
467 SUBM_READ_TMP(1:STACK_ONE) = SUBM_READ_ONE(1:STACK_ONE)
468 STACK = STACK_ONE
469 ELSE
470 ! This code will not go if GENE_MAX == 1 / Result does not need to be allocated
471 CALL UNION_2_SORTED_SETS( SUBM_READ_TMP, STACK ,
472 * SUBM_READ_ONE, STACK_ONE ,
473 * RESULT, NB_RESULT )
474
475 SUBM_READ_TMP(1:NB_RESULT) = RESULT(1:NB_RESULT)
476 STACK = NB_RESULT
477 ENDIF
478 ENDDO
479
480
481 ! TAG Parts from Readed SUBSETs
482 ! ----------------------------------------------------
483
484 NINDX = 0
485 DO I=1,STACK
486 ISUB = SUBM_READ_TMP(I)
487 DO IP=1,NPART
488 SUB_INDEX = IPART(9,IP)
489 IF (ISUB == SUB_INDEX) THEN
490
491 PARTM = IP
492
493 NINDX=NINDX+1 ! nb of Parts of CLAUSE submodels
494 PART_READ_TMP(NINDX) = PARTM
495
496 ENDIF
497 ENDDO ! DO
498 ENDDO
499
500
501 ! Sort of TAG Parts from Readed SUBMODELs and remove eventual duplicates
502 ! ----------------------------------------------------
503
504
505 DO I=1,NINDX
506 INDEX(I) = I
507 ENDDO
508 CALL MY_ORDERS(0,IWORK,PART_READ_TMP,INDEX,NINDX,1)
509
510 DO I=1,NINDX
511 SORTED_PARTS(I) = PART_READ_TMP(INDEX(I))
512 ENDDO
513
514 LIST_SIZE = 0
515 CALL REMOVE_DUPLICATES(SORTED_PARTS,NINDX,LIST_SIZE)
516
517
518
519!
520 ! Copy in final SET
521 ! ------------------
522 CLAUSE%NB_PART = LIST_SIZE
523 ALLOCATE(CLAUSE%PART(LIST_SIZE))
524 CLAUSE%PART(1:LIST_SIZE) = SORTED_PARTS(1:LIST_SIZE)
525
526
527
528 ! Tag & convert Nodes of Submodel
529 ! ---------------------
530 CALL CPP_NODE_SUB_TAG(TAGNODSUB)
531
532
533 NINDX = 0
534 DO I=1,STACK
535 ISUB = SUBM_READ_TMP(I)
536 DO J=1,NUMNOD
537 SUB_INDEX = TAGNODSUB(J)
538 IF (ISUB == SUB_INDEX) THEN
539
540 NODE = J
541
542 NINDX=NINDX+1 ! nb of Nodes of CLAUSE subsets
543 NODE_READ_TMP(NINDX) = NODE
544
545 ENDIF
546 ENDDO
547 ENDDO
548
549
550 ! Sort of TAG Nodes from Readed SUBMODELs and remove eventual duplicates
551 ! ----------------------------------------------------
552
553 ALLOCATE(SORTED_NODES(NINDX))
554 ALLOCATE(INDEXN(2*NINDX))
555 INDEXN = 0
556
557 IWORK(:) = 0
558 DO I=1,NINDX
559 INDEXN(I) = I
560 ENDDO
561 CALL MY_ORDERS(0,IWORK,NODE_READ_TMP,INDEXN,NINDX,1)
562
563 DO I=1,NINDX
564 SORTED_NODES(I) = NODE_READ_TMP(INDEXN(I))
565 ENDDO
566
567 LIST_SIZE = 0
568 CALL REMOVE_DUPLICATES(SORTED_NODES,NINDX,LIST_SIZE)
569
570
571 ! Copy in final SET
572 ! ------------------
573 CLAUSE%NB_NODE = LIST_SIZE
574 ALLOCATE( CLAUSE%NODE( LIST_SIZE ) )
575
576 DO I=1,LIST_SIZE
577 CLAUSE%NODE(I) = SORTED_NODES(I)
578 ENDDO
579
580
581
582
583!---
584 DEALLOCATE (PART_READ_TMP)
585 DEALLOCATE (SORTED_PARTS)
586 IF (ALLOCATED(RESULT)) DEALLOCATE (RESULT)
587 DEALLOCATE (SUBM_READ_TMP)
588 DEALLOCATE (SUBM_READ_ONE)
589 DEALLOCATE(TAGNODSUB)
590 DEALLOCATE(NODE_READ_TMP)
591 DEALLOCATE(SORTED_NODES)
592 DEALLOCATE(INDEXN)
593!---
594 END
subroutine create_subm_list(clause, isubmm, jclause, is_available, lsubmodel, ipart)
subroutine create_subm_clause(clause, isubmm, jclause, opt_g, is_available, lsubmodel, ipart)
subroutine create_subm_list_g(clause, isubmm, jclause, is_available, lsubmodel, ipart)
subroutine hm_get_int_array_2indexes(name, ival, index1, index2, is_available, lsubmodel)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
program starter
Definition starter.F:39