93 USE user_interface_mod
98 USE defaults_mod,
only: defaults_
100 use glob_therm_init_mod
102 use checksum_starter_option_mod
103 use checksum_check_mod
108#include "implicit_f.inc"
112#include "analyse_name.inc"
120#include "com01_c.inc"
121#include "com04_c.inc"
122#include "com06_c.inc"
123#include "com08_c.inc"
124#include "com09_c.inc"
125#include "com10_c.inc"
128#include "units_c.inc"
129#include "units_fxbody_c.inc"
131#include "scr03_c.inc"
132#include "scr05_c.inc"
133#include "scr06_c.inc"
134#include "scr12_c.inc"
135#include "scr15_c.inc"
136#include "scr17_c.inc"
137#include "scr23_c.inc"
138#include "param_c.inc"
139#include "lagmult.inc"
140#include "flowcom.inc"
141#include "xtimscr_c.inc"
142#include "sysunit.inc"
143#include "build_info.inc"
144#include "altdoctag.inc"
145#include "execinp.inc"
147#include "commandline.inc"
148#include "userlib.inc"
149#include "ngr2usr_c.inc"
150#include "inter22.inc"
151#include "ige3d_c.inc"
155 INTEGER I,J,K, STAT,INP,OUT
156 INTEGER IFILNAM(2148),LEN,IDMAX_INTER,
157 . IDMAX_GRNOD,IDMAX_LINE,IDMAX_TABLE,IDMAX_FAIL,IDMAX_FUNCT,
158 . IDMAX_PART,IDMAX_PROP,IDMAX_MAT,IDMAX_ELEM,IDMAX_TH,
159 . NB_SEATBELT_SHELLS,RADIOSSV,IFL
160 INTEGER LENR,RUNN,FVERS,IO_ERR,TAGLEN,CHECKSUMLEN,IS_DYNA
161 INTEGER LFNAME,LEN_ENV,STATUS,ISUB_HIERARCHY,TRALL_MAXVAL(7),EDI_RES,
163 INTEGER :: LEN_TMP_NAME
165 INTEGER :: RADFLEX_PROCESS_PID
167 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: SEATBELT_CONVERTED_ELEMENTS
169 CHARACTER(LEN=2148) :: FILNAM
170 CHARACTER CHRUN*4,CPUNAM*20,ROOTN*80,CHRUNR*4,ARCHTITLE*66
171 CHARACTER ALTDOCTAG*256,CHECKSUM*256
172 CHARACTER*2048 FNAME,VAL
174 CHARACTER(LEN=NCHARLINE) :: ERR_MSG
175 CHARACTER(len=8) :: STARTDATE
176 CHARACTER(len=10) :: STARTTIME
177 CHARACTER(len=8) :: ENDDATE
178 CHARACTER(len=10) :: ENDTIME
179 CHARACTER(len=2048) :: TMP_NAME
180 CHARACTER(len=2048) :: OUT_FILE_NAME
181 INTEGER :: NB_DYNA_INCLUDE
185 TYPE(multi_fvm_struct) :: MULTI_FVM
188 TYPE(t_ebcs_tab) :: EBCS_TAB
189 TYPE(output_),
TARGET :: OUTPUT
191 TYPE(mat_elem_) :: MAT_ELEM
192 CHARACTER(LEN=NCHARLINE) :: CWD
193 CHARACTER GLOBAL_PATH*(ncharline+2048)
195 INTEGER*4 GETCWD, STATUS_CWD
197 TYPE(defaults_) :: DEFAULTS
198 TYPE(glob_therm_) :: glob_therm
199 TYPE(pblast_) :: PBLAST
203 INTEGER,
EXTERNAL :: ANEND
211#include
"machine.inc"
213#include
"archloops.inc"
222 IF ( output%CHECKSUM%ST_CHECKSUM_READ == 1 )
THEN
223 CALL checksum_check(output%CHECKSUM%ROOTNAME,path,cpunam,archtitle,iresp)
241 CALL radioss_title(istdo,cpunam,archtitle,filnam,rootlen,chrun,iresp,1)
260 CALL hm_reader_variables(load_error,codvers)
261 IF(load_error /= 0)
THEN
262 WRITE(istdo,
'(A)')
' '
263 WRITE(istdo,
'(A)')
'------------------------------------------------------------------------'
264 WRITE(istdo,
'(A)')
' ERROR : '
265 WRITE(istdo,
'(A)')
' Reader configuration files are not available'
266 WRITE(istdo,
'(A)')
' Check and set RAD_CFG_PATH variable.'
267 WRITE(istdo,
'(A)')
' '
268 WRITE(istdo,
'(A)')
' Standard configuration file installation is '
270 WRITE(istdo,'(a)
') ' %ALTAIR_HOME%\hwsolvers\
radioss\cfg
'
272 WRITE(ISTDO,'(a)
') ' $altair_home/hwsolvers/
radioss/cfg
'
274 WRITE(ISTDO,'(a)
') '------------------------------------------------------------------------
'
279! ----------------------------
280! if -infile or outfile cdl are used, then one needs to change $TMPDIR
281! in order to write all scratch files in the user folder
282 IF(INOUT_BOOL) CALL RADIOSS_SET_ENV_VARIABLE(OUTFILE_NAME , OUTFILE_NAME_LEN)
283! ----------------------------
284 CALL DATE_AND_TIME(STARTDATE,STARTTIME)
289 OPEN (UNIT=RES_MES,STATUS='scratch
',FORM='formatted
')
290 OPEN (UNIT=RES_CHECK,STATUS='scratch
',FORM='formatted
')
292 ISKIP_NGR2USR_ERROR = 0 !set to 1 before calling NGR2USR enables to skip error message (otherwise they are often duplicated).
296 CALL CHECK_MESSAGE_DEFINITION()
301 CALL ANINIT(AN_STARTER, AN_LIVE)
302 CALL SETIGNORECORE (ITRACE)
312#if CPP_mach == CPP_w95 || CPP_mach == CPP_win64_spmd || CPP_mach == CPP_p4win64_spmd || CPP_mach == CPP_wnt || CPP_mach == CPP_wmr || CPP_mach == CPP_p4win64 || CPP_mach == CPP_p4win32
313 CALL GET_ENVIRONMENT_VARIABLE("R2R_ENV_IPID",VAL,LEN_ENV,STATUS,.TRUE.)
315 IF (LEN_ENV==1) IPID = 0
316 CALL GET_ENVIRONMENT_VARIABLE("R2R_ENV_SWALE",VAL,LEN_ENV,STATUS,.TRUE.)
318 IF (LEN_ENV==1) FLG_SWALE = 1
330 ALEFVM_Param%IEnabled = 0
331 ALEFVM_Param%ISOLVER = 0
332 ALEFVM_Param%IPRINT_1 = 0
333 ALEFVM_Param%IPRINT_2 = 0
335 ALEMUSCL_Param%IALEMUSCL = 1
337 ALEMUSCL_Param%BETA = TWO
338 RATIO22 = ONE + TEN/HUNDRED
355 IF(IR4R8==2) ITESTV=-ITESTV
359 CALL USER_WINDOWS_INIT(USER_WINDOWS)
360 USERLIB_LIST(1:100)=0
361 IF(GOT_USERL_ALTNAME==1)THEN
362 DLIBFILE(1:LEN_USERL_ALTNAME)=USERL_ALTNAME(1:LEN_USERL_ALTNAME)
363 DLIBFILE_SIZE=LEN_USERL_ALTNAME
365 DLIBFILE='libraduser_
'
366 DLIBFILE_SIZE=LEN_TRIM(DLIBFILE)
369 CALL DYN_USERLIB_INIT(DLIBFILE,DLIBFILE_SIZE,USERL_AVAIL,DLIBTKVERS,IRESP,GOT_USERL_ALTNAME)
374 CALL MDS_USERLIB_INIT (IRESP, MDS_AVAIL, MDS_VER, MDS_PATH, MDS_PATH_LEN)
382 CALL ST_UACCESS_DUM(IERR)
383 CALL ST_UTABLE_DUM(IERR)
388 IF (GOT_INPUT == 1)THEN
390 CALL GET_FILE_NAME_INFO(INPUT, LENI, ROOTN, LENR, RUNN, FVERS, IS_DYNA)
391 IF (GOT_PATH==1) THEN
392 FNAME=PATH(1:LENP)//INPUT(1:LENI)
399#if CPP_mach == CPP_w95 || CPP_mach == CPP_win64_spmd || CPP_mach == CPP_p4win64_spmd || CPP_mach == CPP_wnt || CPP_mach == CPP_wmr || CPP_mach == CPP_p4win64 || CPP_mach == CPP_p4win32
402 LEN_TMP_NAME = INFILE_NAME_LEN+LFNAME
403 TMP_NAME=INFILE_NAME(1:INFILE_NAME_LEN)//FNAME(1:LFNAME)
404 OPEN(UNIT=ISTDI,FORM='formatted
',FILE=TMP_NAME(1:LEN_TMP_NAME),
405 . ACTION='read
',STATUS='old
',IOSTAT=IO_ERR)
408 WRITE(6,*)'*** error input file
"',FNAME(1:LFNAME),
418 ROOTN = "RADIOSS_STARTER_INPUT"
429 IF(IS_DYNA == 1) THEN
430 CALL CPP_READ_DYNA_AND_CONVERT(FNAME, LFNAME,EDI_RES,FILNAM,ROOTLEN+9+OUTFILE_NAME_LEN)
436 ERR_MSG='OPEN output file
'
437 ERR_CATEGORY='OPEN output file
'
438 CALL TRACE_IN1(ERR_MSG,LEN_TRIM(ERR_MSG))
440 IF (GOT_INPUT == 1)THEN
443 ROOTNAM(1:LENR)=ROOTN(1:LENR)
451 WRITE(ISTDO,'(a)
') ' '
452 WRITE(ISTDO,'(a,i4)
') '** error : input file run number set to
',IRUN
453 WRITE(ISTDO,'(a)
') ' modif files option is deprecated
'
454 WRITE(ISTDO,'(a)
') ' '
462 WRITE(CHRUN,'(i4.4)
')IRUN
466 FILNAM =OUTFILE_NAME(1:OUTFILE_NAME_LEN)//
467 . ROOTNAM(1:ROOTLEN)//'_
'//CHRUN//'.out
'
468 OPEN(UNIT=IOUT,FILE=FILNAM(1:OUTFILE_NAME_LEN+ROOTLEN+9),
469 . ACCESS='sequential
',
470 . FORM='formatted
',STATUS='unknown
')
472 OUT_FILE_NAME(1:LEN_TRIM(FILNAM))=FILNAM(1:LEN_TRIM(FILNAM))
474 WRITE(IOUT, '(1x,a)
')TRIM(FILNAM)
478 CALL RADIOSS_TITLE(IOUT,CPUNAM,ARCHTITLE,
479 * FILNAM,ROOTLEN,CHRUN,IRESP,1)
482 CALL PRINTCENTER(" ",0,IOUT,1)
483 ELSEIF (FLG_SWALE==1) THEN
484 FILNAM =OUTFILE_NAME(1:OUTFILE_NAME_LEN)//ROOTNAM(1:ROOTLEN)//'_
'//CHRUN//'.out
'
485 OPEN(UNIT=IOUT,FILE=FILNAM(1:ROOTLEN+9+OUTFILE_NAME_LEN),
486 . ACCESS='sequential
',
487 . FORM='formatted
',STATUS='unknown
')
489 OUT_FILE_NAME(1:ROOTLEN+9+OUTFILE_NAME_LEN)=FILNAM(1:ROOTLEN+9+OUTFILE_NAME_LEN)
494 ERR_MSG='OPEN output file
'
495 ERR_CATEGORY='OPEN output file
'
551 NIMV = 75 ! array size for Monitored Volumes
565 RTITR = nchartitle/3.
566 LTITR = ceiling(RTITR)
576 NPROPGI = 750 + LTITR
577 NPROPMI = 300 + LTITR
602 ALE%GLOBAL%NALENOVS = 6
618 MULTI_FVM%IS_USED = .FALSE.
619 MULTI_FVM%NS_DIFF = .FALSE.
635 ALE%GLOBAL%I_DT_NODA_ALE_ON = 0 ! by default DT NODA * options are no longer available for ALE grid points.
642 IF( GOT_INSPIRE_ALM == 1)THEN
647 CALL TRACE_IN1(ERR_MSG,LEN_TRIM(ERR_MSG))
648 ERR_MSG='global units
'
649 ERR_CATEGORY='global units
'
650 CALL TRACE_IN1(ERR_MSG,LEN_TRIM(ERR_MSG))
659 CALL TRACE_IN1(ERR_MSG,LEN_TRIM(ERR_MSG))
660 ALLOCATE(LSUBMODEL(1))
661 IF(ALLOCATED(LSUBMODEL)) DEALLOCATE(LSUBMODEL)
666.AND.
IF (GOT_INPUT == 1 IS_DYNA == 0)THEN
669 STATUS_CWD = GETCWD(CWD)
670 LEN_CWD = LEN_TRIM(CWD)
671 GLOBAL_PATH = TRIM(PATH)
673 CALL CPP_BUILD_MODEL_INC(FNAME,LFNAME,EDI_RES,NB_DYNA_INCLUDE,GLOBAL_PATH,LEN_TRIM(GLOBAL_PATH) )
675.NE.
IF(NB_DYNA_INCLUDE 0) THEN
678 CALL CPP_PRINT_DYNA(FILNAM,ROOTLEN+9+OUTFILE_NAME_LEN)
679 OPEN(UNIT=IOUT,FILE=FILNAM(1:ROOTLEN+9+OUTFILE_NAME_LEN),
680 . ACCESS='sequential
',FORM='formatted
',STATUS='unknown
',POSITION="APPEND")
683 WRITE(IOUT,'(a)
')'**********************************************************************
'
685 WRITE(IOUT,'(a)
')'************************************************************************
'
692 IF (IS_DYNA == 1) THEN
695 CALL CPP_PRINT_DYNA(FILNAM,ROOTLEN+9+OUTFILE_NAME_LEN)
696 OPEN(UNIT=IOUT,FILE=FILNAM(1:ROOTLEN+9+OUTFILE_NAME_LEN),
697 . ACCESS='sequential
',FORM='formatted
',STATUS='unknown
',POSITION="APPEND")
700 WRITE(IOUT,'(a)
')'************************************************************************
'
702 WRITE(IOUT,'(a)
')'************************************************************************
'
707 IF (GOT_INPUT == 1) CALL HM_MESSAGES(IS_DYNA)
711.AND.
IF(IPID /= 0 GOT_HSTP_READ == 0) THEN
713 CALL CPP_PRINT_PARAMETERS(FILNAM,ROOTLEN+9+OUTFILE_NAME_LEN)
714 OPEN(UNIT=IOUT,FILE=FILNAM(1:ROOTLEN+9+OUTFILE_NAME_LEN),
715 . ACCESS='sequential
',FORM='formatted
',STATUS='unknown
',POSITION="APPEND")
720 IF(ALLOCATED(LSUBMODEL)) DEALLOCATE(LSUBMODEL)
723 CALL CPP_SUBMODEL_COUNT(NSUBMOD,IBID)
725 ALLOCATE (LSUBMODEL(NSUBMOD),STAT=stat)
726 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,
732 LSUBMODEL(1:NSUBMOD)%SKEW = 0
733 CALL HM_READ_SUBMODEL(LSUBMODEL)
735 ALLOCATE (LSUBMODEL(0),STAT=stat)
736 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,
743 CALL HM_GET_MAX_ID('/inter
',IDMAX_INTER,LSUBMODEL)
744 CALL HM_GET_MAX_ID('/grnod
',IDMAX_GRNOD,LSUBMODEL)
745 CALL HM_GET_MAX_ID('/line
',IDMAX_LINE,LSUBMODEL)
746 CALL HM_CONVERT_INTER_TYPE19(IDMAX_INTER,IDMAX_GRNOD,IDMAX_LINE,LSUBMODEL)
750 CALL HM_GET_MAX_ID('/table
',IDMAX_TABLE,LSUBMODEL)
751 CALL HM_GET_MAX_ID('/funct
',IDMAX_FUNCT,LSUBMODEL)
752 CALL HM_GET_MAX_ID('',IDMAX_FAIL,LSUBMODEL)
753 IF (IS_DYNA == 0) CALL HM_CONVERT_FAIL_TAB(MAX(IDMAX_FUNCT,IDMAX_TABLE),IDMAX_FAIL,LSUBMODEL)
759 NB_SEATBELT_SHELLS = 0
760 CALL HM_COUNT_2D_ELEMENT_SEATBELT(NB_SEATBELT_SHELLS,LSUBMODEL)
761 ALLOCATE (SEATBELT_CONVERTED_ELEMENTS(3,NB_SEATBELT_SHELLS),STAT=stat)
762 SEATBELT_CONVERTED_ELEMENTS(1:3,1:NB_SEATBELT_SHELLS) = 0
763 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,
765 . C1='seatbelt_converted_elements
')
772 CALL HM_GET_MAX_ID('/part
',IDMAX_PART,LSUBMODEL)
773 CALL HM_GET_MAX_ID('/prop
',IDMAX_PROP,LSUBMODEL)
774 CALL HM_GET_MAX_ID('/mat
',IDMAX_MAT,LSUBMODEL)
775 CALL HM_GET_MAX_ID('/spring
',IDMAX_ELEM,LSUBMODEL)
776 CALL HM_GET_MAX_ID('/th
',IDMAX_TH,LSUBMODEL)
778 IF (NB_SEATBELT_SHELLS > 0)
779 . CALL HM_CONVERT_2D_ELEMENTS_SEATBELT(IDMAX_PART,IDMAX_PROP,IDMAX_MAT,IDMAX_ELEM,IDMAX_TH,
780 . SEATBELT_CONVERTED_ELEMENTS,NB_SEATBELT_SHELLS,LSUBMODEL)
782 ! Initialisation of glob_therm module
784 call glob_therm_init(glob_therm)
788 CALL CONTRL(MULTI_FVM,LSUBMODEL,IS_DYNA,DETONATORS,USER_WINDOWS,MAT_ELEM,
789 . NAMES_AND_TITLES,LIPART1,DEFAULTS,GLOB_THERM,PBLAST,OUTPUT)
794.OR.
IF (GOT_HSTP_READ == 1 GOT_HSTP_WRITE == 1) THEN
795 CALL HSTP(ROOTN,ROOTLEN,LSUBMODEL,STARTDATE,STARTTIME,FILNAM,OUTFILE_NAME_LEN)
812 ERR_MSG='deck reading
'
813 ERR_CATEGORY='deck reading
'
814 CALL TRACE_IN1(ERR_MSG,LEN_TRIM(ERR_MSG))
818 CALL R2R_FORK(CHRUN,FILNAM,LSUBMODEL)
826 call hm_read_checksum(LENI,INPUT,LENP,PATH,OUTPUT)
831 . MULTI_FVM ,LSUBMODEL ,IS_DYNA ,DETONATORS ,EBCS_TAB,
832 . SEATBELT_CONVERTED_ELEMENTS ,NB_SEATBELT_SHELLS,NB_DYNA_INCLUDE ,USER_WINDOWS ,OUTPUT ,
833 . MAT_ELEM,NAMES_AND_TITLES,DEFAULTS,glob_therm,PBLAST,SENSOR_USER_STRUCT,CHECK_USED)
838 IF (IPID/=0) CLOSE(IIN2)
846 CALL ANCMSG(MSGID=1621,
852 IF(ALLOCATED(SEATBELT_CONVERTED_ELEMENTS)) DEALLOCATE(SEATBELT_CONVERTED_ELEMENTS)
853 CALL USER_WINDOWS_CLEAN(USER_WINDOWS)
854 CALL TH_CLEAN(OUTPUT%TH)
857 ! -----------------------------
858 ! write the message only if restart
859 ! files are generated
860 IF(RESTART_FILE==1) THEN
861 WRITE(CHRUNR,'(i4.4)
')IRUN
862 FILNAM=ROOTNAM(1:ROOTLEN)//'_
'//CHRUNR
863 WRITE (IOUT,80) FILNAM(1:ROOTLEN+5)
864 80 FORMAT (/4X,14H RESTART FILES:,1X,A,8H WRITTEN/
865 . 4X,14H -------------/)
867 ! -----------------------------
869 WRITE(IOUT,'(a)
')TITRE(47)
872 CALL PRINTIME(1,GOT_TIMER,STARTDATE,STARTTIME,ENDDATE,ENDTIME)
875#if CPP_mach == CPP_w95 || CPP_mach == CPP_win64_spmd || CPP_mach == CPP_p4win64_spmd || CPP_mach == CPP_wnt || CPP_mach == CPP_wmr || CPP_mach == CPP_p4win64 || CPP_mach == CPP_p4win32
876 CLOSE(UNIT=ISTDI, STATUS='delete
', IOSTAT=IO_ERR)
878 CLOSE(UNIT=ISTDI, STATUS='delete
', IOSTAT=IO_ERR)
880 IF (IO_ERR /= 0) THEN
882 WRITE(6,*)'*** error closing temporary input file
'
885 CALL CPP_DELETE_MODEL()
890 CALL F_ANEND(OUT_FILE_NAME,LEN_TRIM(OUT_FILE_NAME),ROOTNAM,
891 * ROOTLEN,ENDDATE,ENDTIME,OUTPUT)