View difference between Paste ID: cnYtgDtR and 9vgtX3fD
SHOW: | | - or go back to the newest paste.
1
      ! ************************************************************************
2
      
3
      ! THIS MODULE IS A CONTAINER FOR THE INITIALISATION AND SOLUTION
4
      ! OF A USER EQUATION OF STATE
5
      
6
      ! THE FOLLOWING ROUTINES ARE INCLUDED:
7
8
      ! MODULE EOS_USER_1
9
      !   DEFINE VARIABLES THAT ARE COMMON BETWEEN THE ROUTINES BELOW
10
11
      ! SUBROUTINE INIT_EOS_USER_1
12
      !   DEFINE THE INPUT PARAMETERS FOR THE USER EOS
13
14
      ! SUBROUTINE CHECK_EOS_USER_1
15
      !   CHECK PARAMETERS ARE VALID FOR THE USER EOS
16
17
      ! SUBROUTINE SET_EOS_USER_1
18
      !   SET SHORTCUTS TO PARAMETERS FOR THE USER EOS
19
20
      ! SUBROUTINE SOLVE_EOS_USER_1
21
      !   SOLVE THE USER EQUATION OF STATE
22
23
      ! SUBROUTINE BULK_EOS_USER_1
24
      !   GET BULK MODULUS FOR THE USER EQUATION OF STATE
25
26
      ! BEFORE EACH ROUTINE IS CALLED, THE FOLLOWING POINTERS ARE SET-UP
27
      !   MTL - POINTER TO THE CURRENT MATERIAL
28
      !   EQ  - POINTER TO THE CURRENT FLAG/EQUATION/MATERIAL OPTION
29
      
30
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
31
      ! NOTE: CARE SHOULD BE TAKEN WHEN USING THIS MATERIAL MODEL WITH THE 
32
      !       ANP TETRAHEDRAL ELEMENTS. IT IS HIGHLY RECOMMENDED THAT YOU
33
      !       CONTACT ANSYS FOR ADVICE ON THE TYPES OF MATERIALS
34
      !       APPLICABLE TO THE ANP TERTRAHEDRAL ELEMENT.
35
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36
37
      ! ************************************************************************
38
39
      MODULE EOS_USER_1
40
      USE kindef
41
      
42
      IMPLICIT NONE
43
      SAVE
44
45
      ! SPECIFY COMMON VARIABLES TO BE ACCESSED BY ROUITNES BELOW HERE
46
      !INTEGER(INT4) ::
47
      !REAL(REAL8) ::
48
      REAL(REAL8), DIMENSION(7) :: CO1 ,S1 ,GRUG,C2,S2,S3,MUIN
49
      
50
      END MODULE EOS_USER_1
51
52
      SUBROUTINE INIT_EOS_USER_1(IFACT)
53
54
      USE material
55
      USE eos_user_1
56
57
58
      IMPLICIT NONE
59
60
      INTEGER (INT4) ::   IFACT
61
62
      ! ************************************************************************
63
64
      ! THIS SUBROUTINE INITIALISES (ALLOCATES) PARAMETERS AND DATA
65
66
      ! FLAG - IMF_EOS_USER_1
67
68
      ! INPUT - IFACT = 0 JUST GET NAME OF EQUATION TO DISPLAY IN UI
69
      !         IFACT = 1 EQUATION IS ACTIVE HENCE ALLOCATE AND SET DATA
70
71
      ! ************************************************************************
72
73
      ! DEFINE PARAMETERS TO ALLOW ALLOCATION
74
      EQ%EQTYPE = IMF_EOS_USER_1 ! DO NOT MODIFY THIS LINE
75
      EQ%NAME = 'User EOS #1'
76
      EQ%NPAR = 7                ! NUMBER OF REAL INPUT PARAMETER
77
      EQ%NUMOPT = 0              ! NUMBER OF OPTION LISTS
78
      EQ%NDEPFLG = 0             ! NUMBER OF NON-OPTIONAL DEPENDANT (CHILD) FLAGS/MODEL OPTION
79
      EQ%NCHAR = 0
80
      EQ%NPAR_VEC = 0
81
82
      IF (IFACT==1) THEN
83
        CALL ALLOC_EQ ! DO NOT MODIFY THIS LINE, ALLOCATES MEMORY
84
85
        ! FOR EACH REAL INPUT PARAMETER, ASSIGN DATA
86
        !   FOR EXAMPLE, TO SET VALUES FOR PARAMETER 1:
87
88
        !             ('name        '      Length "cm" , Time"us", Mass "g" , H, val, min,max, default,0,required)
89
        EQ%PAR(1)=PRMT (1,'C1'              ,1,-1,0,0,ZERO,ZERO,BIG,ZERO    ,0,0)
90
        EQ%PAR(2)=PRMT (2,'S1'              ,0,0,0,0,ZERO,ZERO,BIG,ZERO     ,0,0)
91
        EQ%PAR(3)=PRMT (3,'GRUG'            ,0,0,0,0,ZERO,ZERO,BIG,ZERO     ,0,0)
92
        EQ%PAR(4)=PRMT (4,'Mu, (RHO/RHO0)-1',-1,-2,1,0,ZERO,ZERO,BIG,ZERO   ,0,0)
93
        EQ%PAR(5)=PRMT (5,'C2'              ,1,-1,0,0,ZERO,ZERO,BIG,ZERO    ,0,0)
94
        EQ%PAR(6)=PRMT (6,'S2'              ,0,0,0,0,ZERO,ZERO,BIG,ZERO     ,0,0)
95
        EQ%PAR(7)=PRMT (7,'S3'              ,0,0,0,0,ZERO,ZERO,BIG,ZERO     ,0,0)
96
97
        ! FOR EACH OPTION LIST, ASSIGN DATA
98
        !   FOR EXAMPLE, SELECT AN EOS FOR THE SOLID PHASE
99
        !   EQ%OPTION(1)%NAME = 'Solid EOS'  ! OPTION LIST NAME
100
        !   EQ%OPTION(1)%NUMOPT = 3          ! NUMBER OF OPTIONS IN THE LIST
101
        !   EQ%OPTION(1)%DEFAULT = 1         ! DEFAULT OPTION
102
        !   EQ%OPTION(1)%SELECTED = 1        ! SELECTED OPTION
103
        !   CALL ALLOC_OPTION(1)             ! ALLOCATE THE MEMORY
104
        !   DEFINE OPTIONS
105
        !                                ('name  ',active,' ',0 / Dependant (child) flag)
106
        !   EQ%OPTION(1)%OPTS(1) = OPTION('Linear','Y',' ',IMF_EOS_LINEAR)
107
        !   EQ%OPTION(1)%OPTS(2) = OPTION('Polynomial','Y',' ',IMF_EOS_POLYNOMIAL)
108
        !   EQ%OPTION(1)%OPTS(3) = OPTION('Shock','Y',' ',IMF_EOS_SHOCK)
109
110
        ! FOR EACH NON-OPTIONAL DEPENDANT (CHILD) FLAG/MODEL OPTION, ASSIGN DEPENDANT FLAG
111
        !   EQ%DEPFLG(1) = IMF_TEMPERATURE
112
      ENDIF
113
114
      ! SET IN ACTIVE SWITCH FOR APPROPRIATE PROCESSOR TYPE:: ALL ON BY DEFAULT
115
      !   FOR EXAMPLE, SWITCH OF FOR EULER FCT
116
      EQ%IFSOLVER(ISLV_FCT) = 0
117
118
      RETURN
119
      END SUBROUTINE INIT_EOS_USER_1
120
121
122
      SUBROUTINE SET_EOS_USER_1
123
124
      USE material
125
      USE eos_user_1
126
127
      IMPLICIT NONE
128
129
      ! ************************************************************************
130
131
      ! THIS SUBROUTINE ASSIGNS SHORTCUTS FOR DIRECT USE IN THE SOLVER
132
133
      ! ************************************************************************
134
135
      RHOREF    = MTL%RHOREF  ! DO NOT MODIFY THIS LINE
136
      CO1        = EQ%PAR(1)%VAL
137
      S1        = EQ%PAR(2)%VAL
138
      GRUG      = EQ%PAR(3)%VAL
139
      MUIN      = EQ%PAR(4)%VAL
140
      C2        = EQ%PAR(5)%VAL
141
      S2        = EQ%PAR(6)%VAL
142
      S3        = EQ%PAR(7)%VAL
143
144
      !   ISEL_OPT = EQ%OPTION(1)%SELECTED
145
146
      RETURN
147
148
      END SUBROUTINE SET_EOS_USER_1
149
150
      SUBROUTINE CHECK_EOS_USER_1
151
152
      USE material
153
      USE eos_user_1
154
155
      IMPLICIT NONE
156
157
      ! ************************************************************************
158
159
      ! THIS SUBROUTINE CHECKS INPUT DATA
160
161
      ! ************************************************************************
162
163
      ! PLACE USER CHECKS HERE
164
165
      RETURN
166
167
      END SUBROUTINE CHECK_EOS_USER_1
168
169
      SUBROUTINE SOLVE_EOS_USER_1 &
170
      (P0        ,E0        ,ALPHA     ,DEN       ,DVV       ,DSIE      , &
171
       Q         ,PP        ,EE        ,SOUND     ,IFAIL     ,IFSPHQ    , &
172
       IF_SIMULTANEOUS      ,IFGAS     ,ARHO      ,BRHO      ,DADETA    ,DBDETA, NOIN1, NOIN2)
173
174
      USE material
175
      USE eos_user_1
176
      USE wrapup
177
     !C1,S1,GRUG,VE,VB,C2,S2
178
179
 
180
      IMPLICIT NONE
181
182
      INTEGER(INT1)  ::  IFAIL
183
      INTEGER (INT4) :: IFSPHQ,  IFLAG,  IFGAS, IF_SIMULTANEOUS
184
      REAL (REAL8)   ::  ALPHA,    DEN,   DSIE,    DVV,     EE,     E0
185
      REAL (REAL8)   ::     PP,     P0,      Q,  SOUND,   ARHO,   BRHO
186
      REAL (REAL8)   :: DADETA, DBDETA, EMU, BULK
187
      REAL (REAL8)   ::  NOIN1, NOIN2 
188
189
      ! ************************************************************************
190
191
      ! THIS IS A USER SUPPLIED SUBROUTINE WHICH CALCULATES PRESSURE
192
      ! AND ENERGY AS A FUNCTION OF DENSITY. YOU ARE REQUIRED TO
193
      ! SIMULTANEOSLY SOLVE THE EQUATION OF STATE ( P=f(DEN,E) ) AND
194
      ! THE ENERGY EQUATION ( DE + P*DV = 0 ).
195
196
      ! INPUT PARAMETERS
197
198
      !    P0      OLD PRESSURE + OLD ART. VISCOSITY
199
      !    E0      OLD INTERNAL ENERGY
200
      !    ALPHA   OLD ALPHA
201
      !    DEN     NEW DENSITY
202
      !    DVV     DV/V FROM OLD VALUES TO NEW VALUES
203
      !    DSIE    SPECIFIC INTERNAL ENERGY DEPOSITION
204
      !    Q       NEW ARTIFICIAL VISCOSITY
205
      !               IFSPHQ = 0 - NEW VISCOUS PRESSURE
206
      !               IFSPHQ = 1 - VISCOUS ENERGY INCREMENT (PER UNIT MASS)
207
      !    IFAIL   STRESS STATE INDICATOR
208
      !            = 0   HYDRO
209
      !            = 1   ELASTIC
210
      !            = 2   PLASTIC
211
      !            > 3   BULK FAILURE
212
      !    IFSPHQ  =1 FOR A SPH SUBGRID
213
214
      ! OUTPUT PARAMETERS
215
216
      !    IF_SIMULTANEOUS  INDICATE WHETHER YOU WANT AUTODYN TO DO A SIMULTANEOUS SOLUTION
217
      !                     FOR PRESSURE AND ENERGY, OR WHETHER THIS IS INCLUDED IN THE USER
218
      !                     SUBROUTINE
219
      !    DSIE    SPECIFIC INTERNAL ENERGY DEPOSITION
220
      !    Q       RESET TO ZERO IF CELL IS FAILED
221
      !    IFAIL   STRESS STATE INDICATOR (SEE ABOVE)
222
223
224
      !    IF_SIMULTANEOUS = 0, YOU WANT AUTODYN TO DO THE SIMULTANEOUS SOLUTION
225
      !      ASSUMES THAT EOS IS IN THE FORM P = ARHO(DVV) + BRHO(DVV)*DEN*ENERGY
226
      !      SEE EQN 11.17 TO 11.21 OF THEORY MANUAL FOR MORE DETAILS
227
      !      OUTPUT:
228
      !         ARHO    
229
      !         BRHO    
230
      !         DADETA  d(ARHO)/d(DVV) DIFFERENTIAL OF ARHO wrt DVV
231
      !         DBDETA  D(BRHO)/d(DVV) DIFFERENTIAL OF BRHO wrt DVV
232
233
      !    IF_SIMULTANEOUS = 1, SIMULTANEOUS SOLUTION DONE IN USER MODEL
234
      !      OUTPUT:
235
      !         PP      NEW PRESSURE
236
      !         EE      NEW INTERNAL ENERGY
237
      !         SOUND   BULK SOUNDSPEED
238
239
    
240
      
241
      ! ADDITIONAL INFORMATION AVAILABLE THROUGH 
242
243
      !    MATNO          THE MATERIAL NUMBER OF THE MATERIAL BEING PROCESSED
244
245
      ! ************************************************************************
246
247
      ! TEMPORARY ERROR MESSAGE - REPLACE WITH YOUR OWN CODE
248
      CALL USR_MESSAG ('User subroutine USER_1 missing')
249
      NSWRAP = 9
250
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
251
!                                      The line of code that im trying to implement it into the solver                             !
252
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    
253
          NOIN1 = (DEN*CO1*CO1*MUIN)*((1+(1-(GRUG/2)*MUIN)-((GRUG/2)*MUIN*MUIN)))
254
          NOIN2 = 1-((S1-1)*MUIN)-(S2*((MUIN*MUIN)/(MUIN+1)))-(S3*((MUIN*MUIN*MUIN)/((MUIN+1)*(MUIN+1))))  *   1-((S1-1)*MUIN)-(S2*((MUIN*MUIN)/(MUIN+1)))-(S3*((MUIN*MUIN*MUIN)/((MUIN+1)*(MUIN+1))))!MANUALLY INPUT S3 VALUE BEFORE ("___"*((MOIN*MOIN*MOIN)/((MOIN+1)*(MOIN+1))))
255
      
256
      IF (MUIN < 0) THEN
257
          PP = (DEN*CO1*CO1*(MUIN))+(1+MUIN)*GRUG*E0
258
            ELSE IF (MUIN > 0) THEN
259
              PP = (NOIN1/NOIN2) + (1+MUIN)*GRUG*E0
260
            ELSE
261
                DO
262
                PP=0
263
              EXIT
264
          END DO
265
      END IF
266
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
267
      ! EXAMPLE FOR A LINEAR EOS:
268
      ! CALL BULK_EOS_USER_1 (BULK)
269
      ! IF_SIMULTANEOUS = 0
270
      ! EMU = (DEN/RHOREF-ONE)
271
      ! ARHO = BULK*EMU
272
      ! BRHO = ZERO
273
      ! DADETA = BULK
274
      ! DBDETA = ZERO
275
276
      ! TO ACCESS A V4.3 USER SUBROUITNE FOR AUTODYN-2D, UNCOMMENT THE NEXT TWO LINES
277
      ! IF_SIMULTANEOUS = 1
278
      ! CALL EXEOS (P0,E0,ALPHA,DEN,DVV,DSIE,Q,PP,EE,SOUND,IFAIL,IFSPHQ)
279
280
      RETURN
281
282
      END SUBROUTINE SOLVE_EOS_USER_1
283
284
285
      SUBROUTINE BULK_EOS_USER_1 (BULK      )
286
287
      USE material
288
      USE eos_user_1
289
290
      IMPLICIT NONE
291
292
      REAL (REAL8)   ::        BULK
293
294
      ! ************************************************************************
295
296
      ! THIS SUBROUTINE SETS THE BULK MODULUS FOR THE EOS
297
 
298
      ! ************************************************************************
299
300
      ! FOR EXAMPLE
301
      ! BULK = A1
302
303
      ! TO ACCESS A V4.3 USER SUBROUITNE FOR AUTODYN-2D, UNCOMMENT THE NEXT LINE
304
      !CALL EXBULK(BULK)
305
306
      RETURN
307
308
      END SUBROUTINE BULK_EOS_USER_1