zrhans

EOS_USER_1.f90

Jun 1st, 2017
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
Add Comment
Please, Sign In to add comment