77 CHARACTER*200 :: keywd
87 REAL*8,
ALLOCATABLE,
DIMENSION(:) :: tmp_e, tmp_xnu, tmp_rho, tmp_alpha
88 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: tmp_isolntype, tmp_matortho
89 REAL*8,
ALLOCATABLE,
DIMENSION(:) :: tmp_cp, tmp_kappaht
90 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: tmp_isolntypeht
92 ALLOCATE(tmp_e(1:10), tmp_xnu(1:10), tmp_rho(1:10), tmp_alpha(1:10), tmp_isolntype(1:10) )
93 ALLOCATE(tmp_cp(1:10), tmp_kappaht(1:10),tmp_isolntypeht(1:10) ,tmp_matortho(1:10))
97 IF(myid.EQ.0)
print*,
'ROCFRAC:: INSIDE feminp.f90'
99 glb%DummyTractVal = 0.d0
100 glb%DummyBurnRate = 0.d0
103 glb%ALEenabled = .false.
104 glb%ipstatic = .false.
105 glb%ReStart = .false.
107 glb%IONEWER = .false.
108 glb%DampEnabled = .false.
111 glb%EnforceTractionS = .false.
116 glb%cd_fastest = 0.d0
117 glb%NdBasedEl = .false.
118 glb%UnDefConfig = .false.
119 glb%HeatTransSoln = .false.
120 glb%Temperature0 = 0.
121 glb%ArtificialDamping = .false.
122 glb%EnforceTractionS = .false.
123 glb%EnforceTractionSF = .false.
124 glb%DebondPart = .false.
125 glb%DebondPart_MATOUS = .false.
126 glb%ThermalExpansion = .false.
127 glb%AmplitudeTable = .false.
128 glb%debug_state = .false.
131 glb%OverlayExist = .false.
139 OPEN(glb%io_input,file=
'./Rocfrac/RocfracControl.txt',
status=
'old',iostat=ios)
141 IF(myid.EQ.0)
print*,
'ROCFRAC:: Unable to find RocfracControl.txt - STOPPING'
142 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
149 OPEN(glb%io_sum,file=
'Rocfrac/Modin/InputSummary.res',
status=
'unknown',iostat=ios)
151 OPEN(glb%io_sum,file=
'Rocfrac/InputSummary.res',
status=
'unknown',iostat=ios)
155 IF(myid.EQ.0)
print*,
'ROCFRAC:: Unable to find InputSummary.res under Rocfrac/Modin/ or Rocfrac/ - STOPPING'
156 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
165 1
READ(glb%io_input,
'(A)',iostat=ios) keywd
168 print*,
' *END parameter not found - STOPPING'
169 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
178 IF(keywd(1:1).NE.
'*')
THEN
182 IF(keywd(1:2).EQ.
'**')
THEN
186 lll = len_trim(keywd)
188 IF(myid.EQ.0)
WRITE(glb%io_sum,
'(2X,A,A)') keywd(1:lll)
190 IF(keywd(1:4).EQ.
'*END')
THEN
195 ELSE IF(keywd(1:10).EQ.
'*AMPLITUDE')
THEN
199 ELSE IF(keywd(1:13).EQ.
'*HYPERELASTIC')
THEN
201 tmp_e, tmp_xnu, tmp_rho, tmp_alpha, tmp_isolntype)
204 ELSE IF(keywd(1:14).EQ.
'*HEAT TRANSFER')
THEN
208 ELSE IF(keywd(1:8).EQ.
'*ELASTIC')
THEN
210 tmp_e, tmp_xnu, tmp_rho, tmp_alpha, tmp_isolntype , tmp_matortho)
213 ELSE IF(keywd(1:8).EQ.
'*ELEMENT')
THEN
216 ELSE IF(keywd(1:8).EQ.
'*DAMPING')
THEN
217 READ(glb%io_input,*) glb%KappaDamp
218 glb%DampEnabled = .true.
223 ELSE IF(keywd(1:7).EQ.
'*PREFIX')
THEN
226 ELSE IF(keywd(1:4).EQ.
'*ALE')
THEN
229 ELSE IF(keywd(1:5).EQ.
'*NRUN')
THEN
232 ELSE IF(keywd(1:8).EQ.
'*DYNAMIC')
THEN
236 ELSE IF(keywd(1:7).EQ.
'*MATVOL')
THEN
238 tmp_e, tmp_xnu, tmp_rho, tmp_alpha, tmp_isolntype)
240 ELSE IF(keywd(1:7).EQ.
'*MATCOH')
THEN
243 ELSE IF(keywd(1:7).EQ.
'*PLOAD1')
THEN
246 ELSE IF(keywd(1:5).EQ.
'*NODE')
THEN
249 ELSE IF(keywd(1:11).EQ.
'*DUMMYTRACT')
THEN
252 ELSE IF(keywd(1:10).EQ.
'*DUMMYBURN')
THEN
253 READ(glb%io_input,*) glb%DummyBurnRate
255 ELSE IF(keywd(1:10).EQ.
'*DUMMYFLUX')
THEN
256 READ(glb%io_input,*) glb%DummyFlux
258 ELSE IF(keywd(1:11).EQ.
'*BOUNDARYMM')
THEN
261 ELSE IF(keywd(1:11).EQ.
'*BOUNDARYHT')
THEN
264 ELSE IF(keywd(1:9).EQ.
'*BOUNDARY')
THEN
267 ELSE IF(keywd(1:9).EQ.
'*IPSTATIC')
THEN
268 glb%ipstatic = .true.
270 ELSE IF(keywd(1:8).EQ.
'*IONEWER')
THEN
273 ELSE IF(keywd(1:10).EQ.
'*DEFCONFIG')
THEN
274 glb%UnDefConfig = .true.
277 ELSE IF(keywd(1:16).EQ.
'*MICROMECHANICAL')
THEN
279 tmp_e, tmp_xnu, tmp_rho, tmp_alpha, tmp_isolntype)
282 ELSE IF(keywd(1:11).EQ.
'*ARTDAMPING')
THEN
283 glb%ArtificialDamping = .true.
285 ELSE IF(keywd(1:6).EQ.
'*PROBE')
THEN
288 ELSE IF(keywd(1:18).EQ.
'*INITIAL CONDITION')
THEN
292 ELSE IF(keywd(1:6).EQ.
'*DEBUG')
THEN
293 glb%debug_state = .true.
296 ELSE IF(keywd(1:1).EQ.
'*')
THEN
297 print*,
'ROCFRAC: ERROR'
298 print*,
'ROCFRAC: CONTROL DECK OPTION ',trim(keywd),
' NOT SUPPORTED'
299 print*,
'ROCFRAC: STOPPING'
300 CALL mpi_barrier(glb%MPI_COMM_ROCFRAC,ierr)
301 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
312 ALLOCATE(glb%E (1:glb%NumMatVol) )
313 ALLOCATE(glb%xnu (1:glb%NumMatVol) )
314 ALLOCATE(glb%rho (1:glb%NumMatVol) )
315 ALLOCATE(glb%alpha (1:glb%NumMatVol) )
316 ALLOCATE(glb%xmu (1:glb%NumMatVol) )
317 ALLOCATE(glb%xlambda (1:glb%NumMatVol) )
318 ALLOCATE(glb%xkappa (1:glb%NumMatVol) )
319 ALLOCATE(glb%MatOrtho(1:glb%NumMatVol) )
321 ALLOCATE(glb%iSolnType(1:glb%NumMatVol) )
324 IF(glb%DebondPart_Matous) glb%rho(1) = tmp_rho(1)
326 DO i = 1, glb%NumMatVol
328 glb%xnu(
i) = tmp_xnu(
i)
329 glb%rho(
i) = tmp_rho(
i)
330 glb%alpha(
i) = tmp_alpha(
i)
331 glb%iSolnType(
i) = tmp_isolntype(
i)
333 glb%xmu(
i) = glb%E(
i)/(2.d0*(1.d0+glb%xnu(
i)))
335 glb%xlambda(
i) = 2.d0*glb%xmu(
i)*glb%xnu(
i)/(1.d0-2.d0*glb%xnu(
i))
338 glb%xkappa(
i) = glb%xlambda(
i) + 2.d0/3.d0*glb%xmu(
i)
340 glb%MatOrtho(
i) = tmp_matortho(
i)
344 IF(glb%HeatTransSoln)
THEN
345 glb%ThermalDiffusivity = -1.
347 ALLOCATE(glb%iSolnTypeHT(1:glb%NumMatVolHT) )
348 ALLOCATE(glb%KappaHT (1:glb%NumMatVolHT) )
349 ALLOCATE(glb%Cp (1:glb%NumMatVolHT) )
351 DO i = 1, glb%NumMatVolHT
352 glb%KappaHT(
i) = tmp_kappaht(
i)
353 glb%Cp(
i) = tmp_cp(
i)
354 glb%iSolnTypeHT(
i) = tmp_isolntypeht(
i)
358 glb%ThermalDiffusivity =
max( glb%ThermalDiffusivity, glb%KappaHT(
i)/(glb%rho(
i)*glb%Cp(
i)) )
364 DEALLOCATE(tmp_kappaht, tmp_cp, tmp_isolntypeht)
365 DEALLOCATE(tmp_e,tmp_xnu,tmp_rho,tmp_alpha,tmp_isolntype)
368 WRITE(glb%io_sum,50) glb%prefx
370 IF (glb%restart)
WRITE(glb%io_sum,65)
371 WRITE(glb%io_sum,80) glb%NumMatVol,glb%NumMatCoh
372 WRITE(glb%io_sum,85) glb%CourantRatio
374 DO i = 1,glb%NumMatCoh
375 WRITE(glb%io_sum,88) glb%deltan(
i),glb%deltat(
i),glb%SigmaMax(
i),glb%TauMax(
i),glb%Sinit(
i)
381 DO i = 1,glb%NumMatVol
382 WRITE(glb%io_sum,92)
i,glb%E(
i),glb%xnu(
i),glb%rho(
i),glb%alpha(
i)
383 IF(glb%iSolnType(
i).EQ.0)
THEN
384 WRITE(glb%io_sum,*)
' Material Model = Arruda-Boyce '
385 ELSE IF(glb%iSolnType(
i).EQ.-1)
THEN
386 WRITE(glb%io_sum,*)
' Material Model = NeoHookean Incompressible '
387 ELSE IF(glb%iSolnType(
i).EQ.1)
THEN
388 WRITE(glb%io_sum,*)
' Material Model = Elastic, Large Deformation '
389 ELSE IF(glb%iSolnType(
i).EQ.2)
THEN
390 WRITE(glb%io_sum,*)
' Material Model = Elastic, Small Deformation '
392 WRITE(glb%io_sum,*)
' Error, Not a valid Material model, = ', glb%iSolnType(
i)
397 IF(glb%HeatTransSoln)
WRITE(glb%io_sum,*)
'Heat Transfer Solution'
406 50
FORMAT(//,
'DYNAMIC 3D LINEAR ELASTIC FEA',///,
'Job id: ',a20,//)
407 60
FORMAT(
'*** ISOTROPIC ANALYSIS ***',/)
408 65
FORMAT(
' *** RESTART ***',/)
409 80
FORMAT(1
x,
'Number of material types (NUMAT_VOL) =',i12 &
410 /,1
x,
'Number of material types (NUMAT_COH) =',i12)
411 85
FORMAT(/,1
x,
'Steps per characteristic length (STEPS) =',e12.4)
412 86
FORMAT(///,1
x,
'COHESIVE ELEMENT DATA')
413 88
FORMAT(/,1
x,
'Characteristic lengths for the cohesive law:', &
414 /,1
x,
' normal (DELTAN) =',e12.4, &
415 /,1
x,
' tangential (DELTAT) =',e12.4, &
416 /,1
x,
'Maximum normal stress (GLB%SIGMAMAX) =',e12.4, &
417 /,1
x,
'Maximum shearing stress (TAUMAX) =',e12.4, &
418 /,1
x,
'The initial Sthreshold S(init) =',e12.4)
419 90
FORMAT(///,1
x,
'VOLUMETRIC ELEMENT DATA')
420 91
FORMAT(/,4
x,
'MATERIAL SETS')
421 92
FORMAT(/,9
x,
'SET',4
x,i4 &
422 /,12
x,
'E =',10
x,e13.5, &
423 /,12
x,
'Nu =',10
x,e13.5, &
424 /,12
x,
'rho =',10
x,e13.5, &
425 /,12
x,
'alpha =',10
x,e13.5)
453 READ(glb%io_input,
'(A)') glb%prefx
454 glb%prefx_lngth = len_trim(glb%prefx)
483 READ(glb%io_input,*) glb%kappa
484 glb%ALEenabled = .true.
499 READ(glb%io_input,*) glb%CourantRatio
504 IF (glb%CourantRatio > 1.0d0)
THEN
505 glb%CourantRatio = 1.0d0 / glb%CourantRatio
532 CHARACTER(len=200) :: keywd
533 CHARACTER(len=16) :: scalefactor
540 IF ( keywd(1:18).NE.
'*DYNAMIC, IMPLICIT' )
THEN
542 CALL
locchr(keywd,
'SCALE FACTOR ',12,8,k1,k2)
544 scalefactor = keywd(k1:k2)
546 CALL
rchar(scalefactor,glb%CourantRatio)
550 glb%CourantRatio = 1.0
578 CHARACTER(len=200) :: keywd
580 CHARACTER :: option*16
584 CALL
locchr(keywd,
'INTERFACE ',9,8,k1,k2)
586 option = keywd(k1:k2)
588 IF(option.EQ.
'S') glb%EnforceTractionS = .true.
589 IF(option.EQ.
'SF') glb%EnforceTractionSF = .true.
590 IF(option.EQ.
'ALL')
THEN
591 glb%EnforceTractionS = .true.
592 glb%EnforceTractionSF = .true.
595 READ(glb%io_input,*) glb%DummyTractVal
601 tmp_e, tmp_xnu, tmp_rho, tmp_alpha, tmp_isolntype)
632 CHARACTER :: keywd*200
634 CHARACTER*26 :: mattype
635 INTEGER :: nummattype
637 REAL*8,
DIMENSION(1:10) :: tmp_e, tmp_xnu, tmp_rho, tmp_alpha
638 INTEGER,
DIMENSION(1:10) :: tmp_isolntype
640 CALL
conchr(keywd,
'NEOHOOKINC ',10,13,
key)
641 IF(
key.EQ.1) mattype =
'NEOHOOKINC'
643 CALL
conchr(keywd,
'ARRUDA-BOYCE ',12,13,
key)
644 IF(
key.EQ.1) mattype =
'ARRUDA-BOYCE'
646 SELECT CASE (trim(mattype))
648 CASE (
'ARRUDA-BOYCE')
650 READ(glb%io_input,*) nummattype
653 glb%NumMatVol = glb%NumMatVol + 1
658 print*,
'ROCFRAC :: ERROR'
659 print*,
'Number of materials GREATER then 10'
660 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
663 READ(glb%io_input,*) tmp_e(ii), tmp_xnu(ii), tmp_rho(ii), tmp_alpha(ii)
665 glb%cd_fastest =
max( glb%cd_fastest, &
666 sqrt(tmp_e(ii)*(1.d0-tmp_xnu(ii))/tmp_rho(ii)/(1.d0+tmp_xnu(ii))/(1.d0-2.d0*tmp_xnu(ii) )) )
667 tmp_isolntype(ii) = 0
673 READ(glb%io_input,*) nummattype
676 glb%NumMatVol = glb%NumMatVol + 1
681 print*,
'ROCFRAC :: ERROR'
682 print*,
'Number of materials GREATER then 10'
683 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
686 READ(glb%io_input,*) tmp_e(ii), tmp_xnu(ii), tmp_rho(ii), tmp_alpha(ii)
688 glb%cd_fastest =
max( glb%cd_fastest, &
689 sqrt(tmp_e(ii)*(1.d0-tmp_xnu(ii))/tmp_rho(ii)/(1.d0+tmp_xnu(ii))/(1.d0-2.d0*tmp_xnu(ii) )) )
690 tmp_isolntype(ii) = -1
696 print*,
'ROCFRAC :: ERROR'
697 print*,
'ROCFRAC :: *HYPERELASTIC KEYWORD ',trim(mattype),
' NOT FOUND'
698 print*,
'ROCFRAC :: STOPPING'
699 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
708 tmp_e, tmp_xnu, tmp_rho, tmp_alpha, tmp_isolntype, tmp_matortho)
739 CHARACTER :: keywd*200
741 CHARACTER*26 :: mattype
742 INTEGER :: nummattype
743 INTEGER ::
i,ii,iii,ierr
744 REAL*8,
DIMENSION(1:10) :: tmp_e, tmp_xnu, tmp_rho, tmp_alpha
745 INTEGER,
DIMENSION(1:10) :: tmp_isolntype, tmp_matortho
748 CHARACTER :: nlgeom*16
749 INTEGER :: nlgeomtype
753 CALL
locchr(keywd,
'NLGEOM ',6,8,k1,k2)
755 nlgeom = keywd(k1:k2)
758 IF(nlgeom.EQ.
'NO')
THEN
763 READ(glb%io_input,*) nummattype
765 IF ( keywd(1:25) ==
'*ELASTIC TYPE=ORTHOTROPIC' )
THEN
767 ALLOCATE(glb%E11o(1:nummattype))
768 ALLOCATE(glb%E22o(1:nummattype))
769 ALLOCATE(glb%E33o(1:nummattype))
770 ALLOCATE(glb%xnu12o(1:nummattype))
771 ALLOCATE(glb%xnu13o(1:nummattype))
772 ALLOCATE(glb%xnu23o(1:nummattype))
773 ALLOCATE(glb%G12o(1:nummattype))
774 ALLOCATE(glb%G13o(1:nummattype))
775 ALLOCATE(glb%G23o(1:nummattype))
776 ALLOCATE(glb%vx1o(1:nummattype))
777 ALLOCATE(glb%vy1o(1:nummattype))
778 ALLOCATE(glb%vz1o(1:nummattype))
779 ALLOCATE(glb%vx2o(1:nummattype))
780 ALLOCATE(glb%vy2o(1:nummattype))
781 ALLOCATE(glb%vz2o(1:nummattype))
782 ALLOCATE(glb%vx3o(1:nummattype))
783 ALLOCATE(glb%vy3o(1:nummattype))
784 ALLOCATE(glb%vz3o(1:nummattype))
791 glb%NumMatVol = glb%NumMatVol + 1
796 print*,
'ROCFRAC :: ERROR'
797 print*,
'Number of ELASTIC materials GREATER then 10'
798 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
801 tmp_isolntype(ii) = nlgeomtype
805 glb%NumMatOrtho = glb%NumMatOrtho + 1
807 iii = glb%NumMatOrtho
809 tmp_matortho(glb%NumMatVol) = iii
811 READ(glb%io_input,*) tmp_rho(ii), glb%E11o(iii), glb%E22o(iii), glb%E33o(iii), &
812 glb%xnu12o(iii), glb%xnu13o(iii), glb%xnu23o(iii), &
813 glb%G12o(iii), glb%G13o(iii), glb%G23o(iii), &
814 glb%vx1o(iii), glb%vy1o(iii), glb%vz1o(iii), &
815 glb%vx2o(iii), glb%vy2o(iii), glb%vz2o(iii), &
816 glb%vx3o(iii), glb%vy3o(iii), glb%vz3o(iii)
820 tmp_xnu(ii) = -9999.9
821 tmp_alpha(ii) = -9999.9
825 tmp_matortho(glb%NumMatVol) = 0
827 READ(glb%io_input,*) tmp_e(ii), tmp_xnu(ii), tmp_rho(ii), tmp_alpha(ii)
829 IF(tmp_alpha(ii).NE.0.d0) glb%ThermalExpansion = .true.
831 glb%cd_fastest =
max( glb%cd_fastest, &
832 sqrt(tmp_e(ii)*(1.d0-tmp_xnu(ii))/tmp_rho(ii)/(1.d0+tmp_xnu(ii))/(1.d0-2.d0*tmp_xnu(ii) )) )
843 tmp_e, tmp_xnu, tmp_rho, tmp_alpha, tmp_isolntype)
852 integer :: nummattype
853 REAL*8,
DIMENSION(1:10) :: tmp_e, tmp_xnu, tmp_rho, tmp_alpha
854 INTEGER,
DIMENSION(1:10) :: tmp_isolntype
856 READ(glb%io_input,*) nummattype
859 glb%NumMatVol = glb%NumMatVol + 1
864 print*,
'ROCFRAC :: ERROR'
865 print*,
'Number of materials GREATER then 10'
866 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
870 READ(glb%io_input,*) tmp_e(ii), tmp_xnu(ii), tmp_rho(ii), tmp_alpha(ii),tmp_isolntype(ii)
873 glb%cd_fastest =
max( glb%cd_fastest, &
874 sqrt(tmp_e(ii)*(1.d0-tmp_xnu(ii))/tmp_rho(ii)/(1.d0+tmp_xnu(ii))/(1.d0-2.d0*tmp_xnu(ii) )) )
889 READ(glb%io_input,*) glb%NumMatCoh
891 ALLOCATE(glb%deltan(1:glb%NumMatCoh))
892 ALLOCATE(glb%deltat(1:glb%NumMatCoh))
893 ALLOCATE(glb%SigmaMax(1:glb%NumMatCoh))
894 ALLOCATE(glb%TauMax(1:glb%NumMatCoh))
895 ALLOCATE(glb%Sinit (1:glb%NumMatCoh))
897 DO i = 1, glb%NumMatCoh
898 READ(glb%io_input,*) glb%deltan(
i),glb%deltat(
i),glb%SigmaMax(
i),glb%TauMax(
i), glb%Sinit(
i)
912 INTEGER :: pload1_input
914 READ(glb%io_input,*) pload1_input
930 READ(glb%io_input,*) glb%NumNodeIO, glb%NumNodeIOpid
932 IF(glb%NumNodeIOpid.EQ.myid)
THEN
934 ALLOCATE(glb%NodeIO(1:glb%NumNodeIO))
936 DO i = 1, glb%NumNodeIO
937 READ(glb%io_input,*) glb%NodeIO
974 INTEGER :: numbcflags
976 READ(glb%io_input,*) numbcflags
978 ALLOCATE(glb%bcCond(1:numbcflags))
981 READ(glb%io_input,*) iaux,glb%bcCond(
i)%BCtypeX,glb%bcCond(
i)%BCtypeY,glb%bcCond(
i)%BCtypeZ, &
982 glb%bcCond(
i)%BCvalueX,glb%bcCond(
i)%BCvalueY,glb%bcCond(
i)%BCvalueZ
1012 INTEGER :: numbcflagsht
1014 READ(glb%io_input,*) numbcflagsht
1017 ALLOCATE(glb%bcCondHT(1:numbcflagsht))
1019 DO i = 1, numbcflagsht
1020 READ(glb%io_input,*) iaux,glb%bcCondHT(
i)%BCtypeX,glb%bcCondHT(
i)%BCtypeY,glb%bcCondHT(
i)%BCtypeZ, &
1021 glb%bcCondHT(
i)%BCvalueX,glb%bcCondHT(
i)%BCvalueY,glb%bcCondHT(
i)%BCvalueZ
1050 INTEGER :: numbcflagsmm
1052 READ(glb%io_input,*) numbcflagsmm
1054 ALLOCATE(glb%bcCondmm(1:numbcflagsmm))
1056 DO i = 1, numbcflagsmm
1057 READ(glb%io_input,*) iaux,glb%bcCondmm(
i)%BCtypeX,glb%bcCondmm(
i)%BCtypeY,glb%bcCondmm(
i)%BCtypeZ, &
1058 glb%bcCondmm(
i)%BCvalueX,glb%bcCondmm(
i)%BCvalueY,glb%bcCondmm(
i)%BCvalueZ
1072 CHARACTER :: keywd*200
1077 CHARACTER :: amptype*16
1079 REAL*8 :: slp, intcpt, rise,
run
1080 REAL*8,
POINTER,
DIMENSION(:,:) :: tableval
1081 REAL*8 :: x1, y1, x2, y2
1083 CALL
locchr(keywd,
'DEFINITION ',10,10,k1,k2)
1085 amptype = keywd(k1:k2)
1087 IF(amptype.EQ.
'TABULAR')
THEN
1089 glb%AmplitudeTable = .true.
1091 READ(glb%io_input,*) glb%NumEntries
1097 ALLOCATE(tableval(1:2,glb%NumEntries))
1098 DO i = 1, glb%NumEntries
1099 READ(glb%io_input,*) tableval(1:2,
i)
1102 glb%NumEntries = glb%NumEntries - 1
1104 ALLOCATE( glb%AmpTable(1:3,glb%NumEntries))
1106 DO i = 1, glb%NumEntries
1110 x2 = tableval(1,
i+1)
1111 y2 = tableval(2,
i+1)
1116 slp = (y2-y1)/(x2-x1)
1118 IF(abs(slp*x1).LT.1.0e-6)
THEN
1121 intcpt = y1/(slp*x1)
1124 glb%AmpTable(1,
i) = tableval(1,
i)
1125 glb%AmpTable(2,
i) = slp
1126 glb%AmpTable(3,
i) = intcpt
1131 DEALLOCATE(tableval)
1159 CHARACTER(len=200) :: keywd
1162 CHARACTER(len=16) :: eltype
1164 CALL
locchr(keywd,
'TYPE ',4,8,k1,k2)
1166 eltype = keywd(k1:k2)
1168 SELECT CASE (trim(eltype))
1174 glb%NdBasedEl = .true.
1177 glb%NdBasedEl = .true.
1190 print*,
'*ELEMENT TYPE NOT FOUND'
1205 CHARACTER :: keywd*200
1207 CHARACTER*26 :: mattype
1208 INTEGER :: nummattypeht
1209 INTEGER ::
i,ii,ierr,
j
1210 REAL*8,
DIMENSION(1:10) :: tmp_kappaht, tmp_cp
1211 INTEGER,
DIMENSION(1:10) :: tmp_isolntypeht
1213 READ(glb%io_input,*) nummattypeht
1215 DO i = 1, nummattypeht
1216 glb%NumMatVolHT = glb%NumMatVolHT + 1
1218 ii = glb%NumMatVolHT
1221 print*,
'ROCFRAC :: ERROR'
1222 print*,
'Number of materials GREATER then 10'
1223 CALL mpi_finalize(glb%MPI_COMM_ROCFRAC,ierr)
1226 READ(glb%io_input,*)
j, tmp_kappaht(ii),tmp_cp(ii)
1228 tmp_isolntypeht(ii) =
j
1242 glb%HeatTransSoln = .true.
1273 READ(glb%io_input,*) glb%NumProbesNd
1275 ALLOCATE(glb%ProbeCoorNd(1:3,1:glb%NumProbesNd))
1276 ALLOCATE(glb%ProbeNd(1:glb%NumProbesNd))
1278 DO i = 1, glb%NumProbesNd
1279 READ(glb%io_input,*) glb%ProbeCoorNd(1:3,
i)
1287 tmp_e, tmp_xnu, tmp_rho, tmp_alpha, tmp_isolntype)
1315 CHARACTER :: keywd*200
1317 INTEGER :: k1, k2,
i
1318 CHARACTER :: modeltype*16
1319 REAL*8,
DIMENSION(1:10) :: tmp_e, tmp_xnu, tmp_rho, tmp_alpha
1320 INTEGER,
DIMENSION(1:10) :: tmp_isolntype
1322 INTEGER :: nummatvol_loc
1324 integer :: nlgeomtype
1328 CALL
locchr(keywd,
'MODEL ',5,8,k1,k2)
1330 IF(k1.GT.0.and.k2.GT.k1)
THEN
1332 modeltype = keywd(k1:k2)
1334 IF(modeltype.EQ.
'HUANG')
THEN
1340 ALLOCATE(glb%MATRIX(1:glb%NMATRIX))
1342 READ(glb%io_input,*) glb%MATRIX(1:glb%NMATRIX), tmp_rho(1)
1344 READ(glb%io_input,*) glb%NPARTICLETYPE
1348 allocate(glb%PARTICLE(1:glb%NPARTICLE,1:glb%NPARTICLETYPE))
1349 DO i = 1, glb%NPARTICLETYPE
1350 READ(glb%io_input,*) glb%PARTICLE(1:4,
i)
1357 IF (glb%particle(1,1)-glb%particle(1,2).NE.0.d0 .OR. &
1358 glb%particle(2,1)-glb%particle(2,2).NE.0.d0)
THEN
1359 print*,
'ROCFRAC: the particles do not have the same moduli.'
1363 IF (abs( glb%particle(3,1)+glb%particle(3,2) +glb%matrix(3)-1.d0).GT.0.001)
THEN
1364 print*,
' the volume fractions of particles and matrix do not add up to 1'
1370 allocate(glb%INTERFAC(1:glb%NINTERFAC))
1371 READ(glb%io_input,*) glb%INTERFAC(1:3)
1374 glb%DebondPart = .true.
1378 glb%PARTICLE(1,1), glb%PARTICLE(2,1), glb%MATRIX(3), glb%cd_fastest )
1391 ELSE IF(modeltype.EQ.
'MATOUS')
THEN
1393 glb%DebondPart_Matous = .true.
1394 glb%NumMatVol = glb%NumMatVol + 1
1396 READ(glb%io_input,*) glb%NumMatVol_Part
1398 ALLOCATE(glb%E1(1:glb%NumMatVol_Part) )
1399 ALLOCATE(glb%E2(1:glb%NumMatVol_Part) )
1400 ALLOCATE(glb%E3(1:glb%NumMatVol_Part) )
1401 ALLOCATE(glb%nu12(1:glb%NumMatVol_Part) )
1402 ALLOCATE(glb%nu13(1:glb%NumMatVol_Part) )
1403 ALLOCATE(glb%nu23(1:glb%NumMatVol_Part) )
1404 ALLOCATE(glb%G12(1:glb%NumMatVol_Part) )
1405 ALLOCATE(glb%G13(1:glb%NumMatVol_Part) )
1406 ALLOCATE(glb%G23(1:glb%NumMatVol_Part) )
1408 DO i = 1, glb%NumMatVol_Part
1409 READ(glb%io_input,*) glb%E1(
i), glb%E2(
i), glb%E3(
i), &
1410 glb%nu12(
i), glb%nu13(
i), glb%nu23(
i), &
1411 glb%G12(
i), glb%G13(
i), glb%G23(
i), tmp_rho(
i)
1415 READ(glb%io_input,*) glb%alpha1, glb%alpha2, glb%c2, glb%p1, glb%p2, glb%Yin, glb%a_eta, glb%a_zeta
1417 glb%cm = 1.d0 - glb%c2
1423 print*,
'ERROR in *MICROMECHANICAL keywd'
1424 print*,
'MODEL type not found'
1429 tmp_isolntype(1) = nlgeomtype
1455 CHARACTER(len=200) :: keywd
1458 CALL
locchr(keywd,
'TYPE ',4,16,k1,k2)
1461 IF(keywd(k1:k2).EQ.
'TEMPERATURE')
THEN
1462 READ(glb%io_input,*) glb%Temperature0
subroutine matmodel_elastic(glb, keywd, tmp_E, tmp_xnu, tmp_rho, tmp_alpha, tmp_iSolnType)
subroutine element_sub(glb, keywd)
subroutine dummytract_sub(glb, keywd)
subroutine micromechanical_sub(glb, keywd, tmp_E, tmp_xnu, tmp_rho, tmp_alpha, tmp_iSolnType)
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
subroutine conchr(text, varna, lvari, kpos0, key)
int status() const
Obtain the status of the attribute.
subroutine matmodel_hyperelastic(glb, keywd, tmp_E, tmp_xnu, tmp_rho, tmp_alpha, tmp_iSolnType)
subroutine feminp(glb, myid)
subroutine matvol_sub(glb, tmp_E, tmp_xnu, tmp_rho, tmp_alpha, tmp_iSolnType)
subroutine amplitude_sub(glb, keywd)
subroutine pload1_sub(glb)
virtual void run(double t, double dt, double alpha)
subroutine matcoh_sub(glb)
subroutine initialcondition_sub(glb, keywd)
subroutine boundarymm_sub(glb)
subroutine probe_sub(glb)
subroutine rchar(char, key)
subroutine locchr(text, varna, lvari, kpos0, kpos1, kpos2)
subroutine boundary_sub(glb)
subroutine heat_transfer_sub(glb, keywd, tmp_KappaHT, tmp_Cp, tmp_iSolnTypeHT)
subroutine homogenizedmat(Density, Em, PRm, Ep, PRp, cm, cd_fastest)
subroutine prefix_sub(glb)
subroutine nodeio_sub(myid)
subroutine dynamic_sub(glb, keywd)
subroutine boundaryht_sub(glb)