初期ひずみ

どうも応力解析の初期条件として初期ひずみは入れることができないようなのでひずみから応力を計算して、形式を整えて出力するサブルーチンを書いた。
最近、論文を書かなきゃいけないのに付録たるサブルーチンに没頭気味。

***  READ FROM .fil ***
C
      SUBROUTINE HKSMAIN
C
      INCLUDE 'aba_param.inc'
      CHARACTER FNAME*80,FNAMEO*80
C 最大レコード数
      PARAMETER(NMAX=1000000)
C 最大エレメント数
      PARAMETER(MAXE=1000000)
C キーのためのオフセット
      PARAMETER(KOFFSET=2)
C ヤング率[M L-1 T-2]
   PARAMETER(YOUNGR=210.0E+7)
C ポアソン比
      PARAMETER(POISON=0.3E+0)
      DIMENSION ARRAY(513),JRRAY(NPRECD,513),LRUNIT(2,1)
      DIMENSION PEX(MAXE),PEY(MAXE),PEZ(MAXE),PEA(MAXE),PES(MAXE)
      DIMENSION NELN(MAXE)
      EQUIVALENCE(ARRAY(1),JRRAY(1,1))
C
C 入力ファイル名と出力ファイル名
C 入力ファイル名では拡張子は省略
C 
      WRITE(6,*)'Enter the name of the input file (w/o extension):'
      READ(5,'(A)') FNAME
      WRITE(6,*)'Enter the name of the output file:'
      READ(5,'(A)') FNAME0      
C
      DO 10 I=1,MAXE
         PEX(I) = 0.D+00
         PEY(I) = 0.D+00
         PEZ(I) = 0.D+00
         PES(I) = 0.D+00
         PEA(I) = 0.D+00
         NELN(I) = 0
   10 CONTINUE
      NTHRES=0
C
*** READ FROM .fil ***
C 初期化
C 読み込む結果ファイルの数
      NRU = 1
C デバイス番号
      LRUNIT(1,1) = 8
C 結果ファイルがバイナリの場合2,アスキーの場合1
   44 CONTINUE
      WRITE(6,*)'Enter the format of input file (1-ASCII, 2-binary):'
      READ(5,*)LRUNIT(2,1)
      IF (LRUNIT(2,1).NE. 1 .AND. LRUNIT(2,1) .NE. 2) THEN
            WRITE(6,*) 'ERROR! This number must be 1 or 2'
            GOTO 44
      END IF
C 書き出し形式、読み込みの場合は何の意味も持たない
      LOUTF = 0
      CALL INITPF(FNAME,NRU,LRUNIT,LOUTF)
C デバイス番号
      JUNIT = 8
      CALL DBRNU(JUNIT)
C
      DO 100 J=1,NMAX
C レコードの順次読み出し
         CALL DBFILE(0,ARRAY,JRCD)
C EOFの検出
         IF (JRCD .NE. 0) GOTO 110
         KEY = JRRAY(1,KOFFSET)
C エレメント番号
         IF (KEY .EQ. 1) THEN
            NELNO = JRRAY(1,KOFFSET+1)
            NELN(NELNO) = NELNO
         END IF
C
C 塑性ひずみPE
         IF (KEY .EQ. 22) THEN
            PEX(NELNO) = ARRAY(KOFFSET+1)
            PEY(NELNO) = ARRAY(KOFFSET+2)
            PEZ(NELNO) = ARRAY(KOFFSET+3)
            PES(NELNO) = ARRAY(KOFFSET+4)
            PEA(NELNO) = ARRAY(KOFFSET+6)
         END IF
C
  100 CONTINUE
  110 CONTINUE
      KEND = J-1
      WRITE(6,*) 'KEND=',KEND
      WRITE(6,*) ' '
C
*** WRITE TO FILE ***
C
      OPEN(51,FILE=FNAMEO)
C
C
      WRITE(51,*)'**Initial conditions,TYPE=STRESS'
      DO K=1,MAXE
         IF (NELN(K) .NE. 0) THEN
            PEAL=PEX(K)+PEY(K)+PEZ(K)
            SX=YOUNGR/(1+POISON)*(PEX(K)-
     1       (POISON/(1.0-2.0*POISON))*(PEAL)))
            SY=YOUNGR/(1+POISON)*(PEY(K)-
     1       (POISON/(1.0-2.0*POISON))*(PEAL)))
            SZ=YOUNGR/(1+POISON)*(PEZ(K)-
     1       (POISON/(1.0-2.0*POISON))*(PEAL)))
            WRITE(51,*)NELN(K),',',SX,',',SY,',',SZ,',0.0,0.0,0.0'
         END IF
      END DO
C
      WRITE(6,*) ' '
      WRITE(51,*) ' '

      STOP
      END

あ、ちなみにここに書いてあるコードをコピペで使うような人はいないと思うけど一応いっておくと、宣伝条項なしの新しいほうのBSDライセンスに準拠ってことで。