C ** VARIABLE DEFINITION LIST ** C C A(3,3) - STORES THE A-MATRIX FOR A LAMINATE (CLT ANALYSIS). C AI(3,3) - STORES THE INVERSE OF THE A-MATRIX FOR A LAMINATE. C CRSH(I) - STORES THE CRITICAL SHEAR LOAD FOR LAMINATE (I). C CRSHMS(I) - STORES THE M. OF S. FOR THE CRITICAL SHEAR LOAD C - FOR LAMINATE (I). C D(3,3) - STORES THE D-MATRIX FOR A LAMINATE (CLT ANALYSIS). C DI(3,3) - STORES THE INVERSE OF THE D-MATRIX FOR A LAMINATE. C DIRCR(I) - STORES WHICH STRAIN DIRECTION IS CRITICAL. C - (IE: 1-DIR,2-DIR,1/2-DIR) FOR PLIES IN LAMINATE (I). C EP1(I,J) - STORES EPSILON-1 FOR PLY (J) IN LAMINATE (I). C EP2(I,J) - STORES EPSILON-2 FOR PLY (J) IN LAMINATE (I). C EP1MAX(J) - MAX ALLOWABLE STRAIN IN 1-DIRECTION FOR MATERIAL (J). C EP2MAX(J) - MAX ALLOWABLE STRAIN IN 2-DIRECTION FOR MATERIAL (J). C E1(J),E2(J) - YOUNG'S MODULI FOR EACH MATERIAL (J). C FIT(I) - STORES FITNESS FOR LAMINATE (I) IN PARENT POPULATION. C GAM12(I,J) - STORES GAMMA-12 FOR PLY (J) IN LAMINATE (I). C G12MAX(J) - MAX ALOWABLE SHEAR STRAIN IN 1-2 DIRECTION. C - FOR MATERIAL (J) C G12(J) - SHEAR MODULUS FOR MATERIAL (J). C IS(I,J) - AN ARRAY WHICH STORES THE STACKING SEQUENCE FOR ALL C - LAMINATES IN THE POPULATION. C - J = 1 => NPLY; I = 1 => NPOP. C - PLIES ARE STORED IN SINGLE PLY STACKS AND HALF THE C - LAMINATE IS STORED BECAUSE ALL LAMINATES ARE ASSUMED C - SYMMETRIC ABOUT THE MID-PLANE. C - 0 = EMPTY PLY; 1 = 0 DEG. PLY; 2 = +/-45 DEG. PLY; C - 3 = 90 DEG. PLY. C ISD(J) - STORES ENTIRE DECODED STACKING SEQ. FOR A LAMINATE C - PLIES ARE STORED IN STACKS OF 1 AND ALL ORIENTATIONS C - EXCLUDING EMPTY STACKS ARE STORED. C - Ex: IS(*,*) = (0,1,2,3) => C - ISD(*) = (0,45,90,90,45,0). C LAMBDA - A PARMATER USED TO MAKE SURE THE GA DOES NOT CONVERGE C - TO VERY THIN LAMINATES. C LAMTH(I) - TOTAL LAMINATE THICKNESS FOR EACH LAMINATE (I). C M, N - NUMBER OF TERMS IN SINE SERIES FOR BUCKLING ANALYSIS C MATL(I,J) - STORES MATERIAL TYPE FOR EACH PLY (J) IN C - LAMINATE (I). C MATLD(J) - STORES MATERIAL TYPE FOR EACH PLY (J) IN A LAMINATE. C NMAT - THE NUMBER OF DIFFERENT MATERIAL TYPES. C NPLY - THE NO. OF SINGLE PLIES IN HALF THE LAMINATE C - (LAMINATE IS ASSUMED TO BE SYMMETRIC). C NPOP - THE NO. OF LAMINATES IN THE POPULATION. C NUM(I) - STORES THE NUMBER OF NON-EMPTY SINGLE PLIES C - CONTAINED IN LAMINATE (I). C NU12(J),NU21 - POISSON'S RATIOS FOR EACH MATERIAL (J). C NX,NY,NXY - IN-PLANE LOADS APLIED TO THE LAMINATE. C N45S(J) - STORES THE NUMBER OF +/- 45 DEGREE PLIES IN A C - LAMINATE FOR EACH MATERIAL (J). C PLYCR(I) - STORES PLY IN LAMINATE (I) C - THAT HAS LARGEST RATIO: (ALL. STRAIN/PLY STRAIN). C PLYMAX - A LARGE INTEGER NUMBER USED FOR DIMENSIONING ARRAYS. C POPMAX - THE MAXIMUM NUMBER OF LAMINATES THAT CAN EXIST IN A C POPULATION (USED TO DIMENSION ARRAYS). C QB(3,3) - STORES THE QBAR MATRIX FOR A LAMINATE (CLT ANALYSIS). C STRMS(I) - MIN AMONG PLIES: (ALLOW. PLY STRAIN/PLY STRAIN). C THICK(J) - THICKNESS OF EACH INDIVIDUAL PLY MADE OF MATERIAL (J). C TOTMAX - A LARGE INTEGER VALUE USED FOR DIMENSIONING ARRAYS. C U(5,J) - STORES THE STIFFNESS INVARIANTS FOR EACH MATERIAL (J). C UNBAL - PENALTY MULITPLIER FOR LAMINATES THAT ARE UNBALANCED. C VIOL - STORES DESIGN FEASIBILITY. C X - LENGTH OF PLATE. C Y - WIDTH OF PLATE. *********************************************************************** C SUBROUTINE ANAL(SUBPOP,I,IS,MATL,NPLY, $ FIT,X,Y,WRITE) IMPLICIT NONE INTEGER POPMAX,PLYMAX,TOTMAX PARAMETER (POPMAX = 500,PLYMAX = 200,TOTMAX = 400) INTEGER SUBPOP LOGICAL WRITE INTEGER IS(POPMAX,PLYMAX),ISD(TOTMAX), $ NMAT,NPLY,VIOL(POPMAX),N15S(10),N30S(10), $ N45S(10),N60S(10),N75S(10),MATL(POPMAX,PLYMAX), $ MATLD(TOTMAX),M,N,MN,NUM(TOTMAX),DIRCR(POPMAX), $ BLCHECK(POPMAX),I,PLYCR(POPMAX),J INTEGER COUNT DOUBLE PRECISION CRSH(POPMAX),CRSHMS(POPMAX),FIT(POPMAX), $ EP1(POPMAX,TOTMAX),EP2(POPMAX,TOTMAX),GAM12(POPMAX,TOTMAX), $ U(5,10),STRMS(POPMAX),LAMBDA,UNBAL,E1(10),E2(10),G12(10), $ NU12(10),THICK(10),EP1MAX(10),EP2MAX(10),G12MAX(10),NX,NY, $ NXY,ALPHA,RHO(10),COST(10),MATCOST(POPMAX),LAMTH(POPMAX), $ M1COST(POPMAX),M2COST(POPMAX),LAYCOST(POPMAX),WTMAT1(POPMAX), $ WTMAT2(POPMAX),WTTOT(POPMAX),A(3,3),D(3,3),AI(3,3),DI(3,3), $ X(POPMAX),Y(POPMAX) C set maximum number of single plies that can be found in C the coded stacking sequence of a laminate C this only needs to be called once ever COUNT = COUNT + 1 IF (COUNT .EQ. 1) THEN OPEN(UNIT = 1, STATUS='OLD', FILE = 'two_mat_analysis.in') READ(1,'(/)') READ (1,*) NMAT READ(1,'(//)') DO J = 1,NMAT READ(1,*) E1(J) READ(1,*) E2(J) READ(1,*) NU12(J) READ(1,*) G12(J) READ(1,*) THICK(J) READ(1,*) EP1MAX(J) READ(1,*) EP2MAX(J) READ(1,*) G12MAX(J) READ(1,*) RHO(J) READ(1,*) COST(J) READ(1,'(//)') END DO READ(1,*) ALPHA READ(1,'(/)') READ(1,*) UNBAL READ(1,*) LAMBDA READ(1,'(///)') READ(1,*) NX READ(1,*) NY READ(1,*) NXY READ(1,*) M READ(1,*) N READ(1,'(///)') DO J = 1,NMAT WRITE(2,500)'PROPERTIES FOR MATERIAL',J,' (psi):' WRITE(2,510)'E1','E2','G12','NU12' WRITE(2,520)E1(J),E2(J),G12(J),NU12(J) WRITE(2,*) WRITE(2,530)'PLY THICK (in.)','DENSITY (lb/in^3)', $ ' COST FACTOR' WRITE(2,540)THICK(J),RHO(J),COST(J) WRITE(2,*) WRITE(2,530)'EPSILON_1-MAX ','EPSILON_2-MAX ', $ 'GAMMA_12-MAX' WRITE(2,540)EP1MAX(J),EP2MAX(J),G12MAX(J) END DO WRITE(2,*) WRITE(2,550)'PLATE LOADINGS (lbs/in, lbs):' WRITE(2,560)'NX','NY','NXY' WRITE(2,570)NX,NY,NXY WRITE(2,*) WRITE(2,*) WRITE(2,580)'PLATE DIMENSIONS (in.) MODE SHAPES', $ 'WEIGHTING FACTOR ' WRITE(2,*) WRITE(2,590)'X Y','M N ALPHA' WRITE(2,600)X(1),Y(1),M,N,ALPHA WRITE(2,*) ! ! check value of weighting factor, alpha ! IF((ALPHA .GT. 1) .OR. (ALPHA .LT. 0)) THEN WRITE(*,*)'ALPHA = ',ALPHA WRITE(*,*)'WEIGHTING FUNCTION MUST BE 0