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 |