Advertisement
rgedies

Running

May 26th, 2023
648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Fortran 129.44 KB | Source Code | 0 0
  1.       program main
  2.       implicit real *8 (a-h,o-z)
  3.       parameter (nnmax=10000,nemax=10000,ncase_max=10)
  4.     parameter (nn = 10000)
  5.       parameter (iabaqus =1, zero=0.0d0) ! set it to 0 for pc software
  6.       character (len=1) :: inter
  7.       character (len=10) :: fname(ncase_max)
  8.       dimension :: inode(nnmax),coord(2,nnmax)
  9.       dimension :: ielem(4,nemax),inelem(4,nemax)
  10.       dimension :: kp(11) !! previous it is kp(11), 08/09
  11.       dimension :: num_nd(nnmax),coord_nd(2,nnmax)
  12.       dimension :: larray_ele(8,nemax)
  13.       dimension :: key_point(11)
  14.     dimension :: nodeflag(nnmax) !!this array is for node's material identification
  15.       dimension :: num_nd_T(nnmax),coord_nd_T(2,nnmax)
  16.       dimension :: larray_ele_T(8,nemax)
  17.       dimension :: key_point_T(11)
  18.  
  19.     REAL*8 VR(NN),PEAK(NN)
  20.     REAL*8 C,Mn,Si,Ni,Cr,Mo,Cu,W,V,Nb,Ti,Al,N
  21.     REAL*8 XFE1,XPE1
  22.     REAL*8 FC1,PC1,BC1
  23.    
  24.     REAL*8 C2,Mn2,Si2,Ni2,Cr2,Mo2,Cu2,W2,V2,Nb2,Ti2,Al2,N2
  25.     REAL*8 XFE2,XPE2,FC2,PC2,BC2
  26.  
  27.     REAL*8 DELTAT,XTERM,DIFF
  28.     real*8 AC1_1,AC3_1,TDISS1,AE4_1,AE3_1,AE1_1,TBS1,TMS1,as1_1&    ,Tliquid1,Tsolid1
  29.     real*8 AC1_2,AC3_2,TDISS2,AE4_2,AE3_2,AE1_2,TBS2,TMS2,as1_2&    ,Tliquid2,Tsolid2
  30.     REAL*8 XA(NN),XF(NN),XP(NN),XB(NN),XM(NN),GS(NN),G(NN),HV(NN)&  ,XL(NN)
  31.  
  32.     COMMON/COMP/C,Mn,Si,Ni,Cr,Mo,Cu,W,V,Nb,Ti,Al,N
  33.     COMMON/COMP2/C2,Mn2,Si2,Ni2,Cr2,Mo2,Cu2,W2,V2,Nb2,Ti2,Al2,N2
  34.     COMMON/TEMPS/AC1_1,AC3_1,TDISS1,AE4_1,AE3_1,AE1_1,TBS1,TMS1,as1_1&  ,Tliquid1,Tsolid1
  35.     COMMON/TEMPS2/AC1_2,AC3_2,TDISS2,AE4_2,AE3_2,AE1_2,TBS2,TMS2,as1_2& ,Tliquid2,Tsolid2
  36.     COMMON/STRUCT/XA,XF,XP,XB,XM,GS,G,HV,XL
  37.     COMMON/KCONST/fc1,pc1,bc1
  38.     COMMON/KCONST2/fc2,pc2,bc2
  39.     COMMON/BASELINE/XFE1,XPE1
  40.     COMMON/BASELINE2/XFE2,XPE2
  41.     common/nodetype/nodeflag
  42.  
  43.       include 'common.f'
  44.       fname(1) = 'case1.dat'
  45.       fname(2) = 'case2.dat'
  46.       fname(3) = 'case3.dat'
  47.       fname(4) = 'case4.dat'
  48.       fname(5) = 'case5.dat'
  49.       fname(6) = 'case6.dat'
  50.       fname(7) = 'case7.dat'
  51.       fname(8) = 'case8.dat'
  52.       fname(9) = 'case9.dat'
  53.       fname(10) = 'case10.dat'
  54.     OLDMESHER = 1 ! SET THIS TO 1 IF YOU WANTTO USE THE NEW MESH
  55.  
  56.       open ( 9,file='data.txt')
  57.       open (12,file='file.log')
  58.       open (97,file='HT_STAT.DAT')
  59.       open (98,file='HT_ERR.DAT')
  60.  
  61.       read (9,*) ncase
  62.       if (ncase .gt. ncase_max) then
  63.          print *, 'Too many cases, precess stoped'
  64.          stop
  65.       end if
  66.  
  67.  1    format(1x,A,I2,A,I2,A)
  68.  3    format(A12,A12,5x,A12,A12)
  69.       do 900 icase=1,ncase
  70.  
  71.          open (10,file=fname(icase))
  72.  
  73.          print 1, '***** CASE #',icase,&        ' OUT OF ',ncase, ' CASE(S) *****'
  74.          write(12,1) '***** CASE #',icase,&        ' OUT OF ',ncase, ' CASE(S) *****'
  75.          n_node = 0
  76.          n_elem = 0
  77.  
  78.          do i=1,nnmax
  79.             num_nd(i) = 0
  80.             coord_nd(1,i) = zero
  81.             coord_nd(2,i) = zero
  82.             inode(i) = 0
  83.             coord(1,i) = zero
  84.             coord(2,i) = zero
  85.          enddo
  86.  
  87.          do i=1,nemax
  88.             do j=1,8
  89.                larray_ele(j,i) = 0
  90.             enddo
  91.             do j=1,4
  92.                ielem(j,i) = 0
  93.                inelem(j,i) = 0
  94.             enddo
  95.          enddo
  96.  
  97.          do i=1,11
  98.             key_point(i) = 0
  99.          enddo
  100.  
  101.          print 1, 'Read the parameters/data into the program.'
  102.          call setup
  103.  
  104.          if (id_conf .eq. 0) then
  105.  
  106.             call mesh00(thickness_p,inode,coord,nnode, &           ielem,inelem,nelem,key_point)
  107.  
  108.          elseif (id_conf .eq. 1) then
  109.  
  110.             d_pipe = d_in + 2*thickness_p
  111.             vl_pipe = 40.0*max(thickness_p,thickness_s)
  112.  
  113.             if (vl_pipe .gt. 500.0d0) vl_pipe=500.0d0
  114.  
  115.             IF ( OLDMESHER .LE. 0.5d0 ) THEN
  116.  
  117.              call mesh01(d_pipe,thickness_p,thickness_s,gap, &  area_w,angle_w,vl_pipe,nnode,nelem,& num_nd,coord_nd,larray_ele,key_point,r_cc)
  118.             ELSE
  119.              call mesh_FINE01(d_pipe,thickness_p,thickness_s,gap,&  area_w,angle_w,vl_pipe,nnode,nelem,& num_nd,coord_nd,larray_ele,key_point,r_cc,iabaqus)
  120.             END IF
  121.     print *, "Mesh completed!"
  122.          elseif (id_conf .eq. 2) then
  123.  
  124.             d_branch = d_branch_in
  125.             vl_runpipe = 20.0d0*thickness_s
  126.             vl_branch = 20.0d0*thickness_s
  127.  
  128.             IF ( OLDMESHER .LE. 0.5d0 ) THEN
  129.                 call mesh02(d_branch,thickness_p,thickness_s,&  gap,gap2,area_w,angle_wrtb,vl_runpipe,& vl_branch,size_w,nnode,nelem,num_nd,coord_nd,&  larray_ele,key_point,r_cc)
  130.               ELSE
  131.              
  132.                 call mesh02_FINE(d_branch,thickness_p,thickness_s, &  gap,gap2,area_w,angle_wrtb,vl_runpipe,&  vl_branch,size_w,nnode,nelem,num_nd,coord_nd,& larray_ele,key_point,r_cc,iabaqus)
  133.             END IF
  134.  
  135.          elseif (id_conf .eq. 3) then
  136.  
  137.             d_pipe = d_in + 2.*thickness_p ! outside radius of the pipe
  138.             vl_pipe = 40.0d0*thickness_p
  139.             call mesh03(d_pipe,thickness_p,area_w,vl_pipe,& size_w,nnode,nelem,num_nd,&    coord_nd,larray_ele,key_point,r_cc)
  140.          else
  141.  
  142.             print 1, "Invalid configuration, analysis stoped"
  143.             stop
  144.  
  145.          endif
  146.  
  147.          if (key_point(1) .eq. 0) then
  148.  
  149.             print 1, 'Analysis of case #',icase,&           ' has failed!'
  150.             print *, "An error has occurred.  The weld geometry ", &           "can not be setup properly."
  151.             print *, "Please review the error message for details."
  152.             write(12,1) 'Analysis of case #',icase,&        ' has failed!'
  153.             write(10,3) 'NA','NA','NA','NA'
  154.             if (icase .lt. ncase) then
  155.                print *, "Do you wish to continue the analysis ", &              "for the rest cases?"
  156.                print *, "Please enter 'y' or 'Y' to continue!"
  157.                print *, "Or enter any other key to terminate!"
  158.                read(*,'(A)') inter
  159.                if ((inter .eq. 'y') .or. (inter .eq. 'Y')) then
  160.                   goto 800
  161.                else
  162.                   stop
  163.                endif
  164.             else
  165.                goto 800
  166.             endif
  167.  
  168.          endif
  169.  
  170.          print *, "There are",nnode," nodes in the FEA model."
  171.          print *, "There are",nelem," elements in the FEA model."
  172.  
  173.          if (id_conf .ne. 0) then
  174.  
  175.             print *, "Resort node numbers and coordinates."
  176.             do i=1,nnode
  177.                inode(i) = num_nd(i)
  178.                coord(1,i) = coord_nd(1,i)
  179.                coord(2,i) = coord_nd(2,i)
  180.             enddo
  181.  
  182.             print *, "Resort element numbers and connectivity."
  183.             do i=1,nelem
  184.                ielem(1,i) = larray_ele(1,i)
  185.                nn1 = larray_ele(2,i)
  186.                nn2 = larray_ele(3,i)
  187.                nn3 = larray_ele(4,i)
  188.                nn4 = larray_ele(5,i)
  189.  
  190.                ielem(2,i) = larray_ele(6,i)
  191.                ielem(3,i) = larray_ele(7,i)
  192.                ielem(4,i) = larray_ele(8,i)
  193.                do ii=1,nnode
  194.                   if (inode(ii) .eq. nn1) inelem(1,i)=ii
  195.                   if (inode(ii) .eq. nn2) inelem(2,i)=ii
  196.                   if (inode(ii) .eq. nn3) inelem(3,i)=ii
  197.                   if (inode(ii) .eq. nn4) inelem(4,i)=ii
  198.                enddo
  199.             enddo
  200.  
  201.           do i=1,nelem
  202.             idKey = ielem(2,i)
  203.             do ii = 1,4
  204.                 innn = inelem(ii,i)
  205.                 nodeflag(innn) = idKey
  206.             end do
  207.           end do
  208.          endif
  209.  
  210.          do i=1,11
  211.             if (key_point(i) .ne. 0) then
  212.                kpp = key_point(i)
  213.                kpn = i
  214.                do ii=1,nnode
  215.                   if (inode(ii) .eq. kpp) then
  216.                      kp(i) = ii
  217.                      exit
  218.                   endif
  219.                enddo
  220.             endif
  221.          enddo
  222.     CONTINUE
  223.  
  224.          if ((icase .eq. ncase) .and. (iabaqus .eq. 1)) then
  225.             call modelout(nnode,inode,coord,nelem, &           ielem,inelem,kpn,key_point)
  226.          endif
  227.  
  228.     if ( oldmesher .gt. 0.5d0 ) then
  229.         call PrepareForMicrostructureCalculation(nnode)
  230.     end if
  231.  
  232.          call solver (1,nnode,inode,coord, &     nelem,ielem,inelem,kpn,kp,istat)
  233.  
  234.          if (istat .eq. 0) then
  235.             write(*,1) 'SOLUTIONS FOR CASE #',ICASE, &           ' HAVE FAILED TO CONVERGE!'
  236.             write(*,1) 'NO RESULTS IS AVAILABLE FOR THIS CASE!'
  237.             write(98,1) 'SOLUTION FOR CASE #',ICASE,&           ' HAS FAILED TO CONVERGE!'
  238.             write(98,1) 'NO RESULTS IS AVAILABLE FOR THIS CASE!'
  239.             write(10,3) 'NA','NA','NA','NA'
  240.             if (icase .lt. ncase) then
  241.                print *, "Do you wish to continue the analysis ",&              "for the rest cases?"
  242.                print *, "please enter 'y' or 'Y to continue!"
  243.                read(*,'(A)') inter
  244.                if ((inter .eq. 'y') .or. (inter .eq. 'Y')) then
  245.                else
  246.                   stop
  247.                endif
  248.             endif
  249.          endif
  250.  
  251.  800     close(10)
  252.          write(*,*)
  253.          write(12,*)
  254.  900  continue
  255.  
  256.       write(97,*) 'OK'
  257.  
  258.       stop
  259.       end
  260.  
  261.       subroutine modelout(nnode,inode,coord,nelem, &     ielem,inelem,kpn,key_point)
  262.  
  263.       implicit double precision (a-h,o-z)
  264.       character (len=8) :: elset
  265.       dimension :: inode(*),coord(2,*)
  266.       dimension :: ielem(4,*),inelem(4,*)
  267.       dimension :: key_point(kpn)
  268.       dimension :: nelweld(nelem),nelapp(nelem),nelbase(nelem)
  269.  
  270.       include 'common.f'
  271.       open(15,file='node.inp')
  272.       open(16,file='elem.inp')
  273.       open(17,file='convects')
  274.       open(18,file='parm.f')
  275.       open(19,file='sets.inp')
  276.  
  277.       write(17,'(A)') '*FILM,OP=NEW'
  278.  
  279.       do i=1,nnode
  280.          if (coord(1,i) .le. 1.0d-6) coord(1,i)=0.0d0
  281.          write (15,5) i,(coord(ii,i),ii=1,2)
  282.       enddo
  283.  5    format(i5,2(', ',ES15.7))
  284.       close(15)
  285.  
  286.       iw=0
  287.       iapp=0
  288.       ib=0
  289.       do i=1,nelem
  290.          write(16,15) ielem(1,i),(inelem(j,i),j=1,4)
  291.          if (ielem(2,i) .eq. 3) then
  292.             iw=iw+1
  293.             nelweld(iw)=ielem(1,i)
  294.          elseif (ielem(2,i) .eq. 2) then
  295.             iapp=iapp+1
  296.             nelapp(iapp)=ielem(1,i)
  297.          elseif (ielem(2,i) .eq. 1) then
  298.             ib=ib+1
  299.             nelbase(ib)=ielem(1,i)
  300.          endif
  301.  
  302.          if (ielem(3,i) .eq. 2) then ! forced convection
  303.             write(17,25) ielem(1,i),ielem(4,i),&           t0_f,2.5E-4
  304.          elseif (ielem(3,i) .eq. 1) then ! free convection
  305.             write(17,25) ielem(1,i),ielem(4,i),&           t_env,h_env
  306.          endif
  307.       enddo
  308.  15   format(i5,9(:',',i5))
  309.  20   format(i5,', F',I1,'NU')
  310.  25   format(I8,', F',I1,',',ES12.5,', ',ES12.5)
  311.  
  312.       if (iw .gt. 0) then
  313.          elset='EWELD'
  314.          call elsetwrite(elset,iw,nelweld)
  315.       endif
  316.       if(iapp .gt. 0) then
  317.          if (id_conf .eq. 1) elset='SLEEVE'
  318.          if (id_conf .eq. 2) elset='BRANCH'
  319.          call elsetwrite(elset,iapp,nelapp)
  320.       endif
  321.       if(ib .gt. 0) then
  322.          elset='PIPE'
  323.          call elsetwrite(elset,ib,nelbase)
  324.       endif
  325.  
  326.       write(18,35) 'block data kparm'
  327.       write(18,35) 'implicit real*8 (a-h,o-z)'
  328.       write(18,35) 'parameter (nprecd=2)'
  329.       write(18,35) 'common / block1 / heat, speed, ',&     'rxx, ryy, dzz'
  330.       write(18,35) 'common / block2 / xcent, ycent'
  331.       write(18,35) 'common / block3 / insd'
  332.       write(18,35) 'common / block4 / d_in, id_f, t0_f, frate'
  333.      
  334.       write(18,45) 'data  heat / ', heat_in
  335.       write(18,45) 'data speed / ', speed
  336.       write(18,45) 'data   dzz / ', r_cc
  337.       write(18,55) 'data  insd / ', key_point(4)
  338.       write(18,45) 'data  d_in / ', d_in
  339.       write(18,55) 'data  id_f / ', id_f
  340.       write(18,45) 'data  t0_f / ', t0_f
  341.       write(18,45) 'data frate / ', velocity
  342.       write(18,35) 'end'
  343.  35   format(6x,A,A)
  344.  45   format(6x,A,ES12.5,' /')
  345.  55   format(6x,A,I5,' /')
  346.  
  347.       close(15)
  348.       close(16)
  349.       close(17)
  350.       close(18)
  351.  
  352.       return
  353.       end
  354.  
  355.       subroutine elsetwrite(name,iel,nelem)
  356.       implicit real*8 (a-h,o-z)
  357.       character (len=8) name
  358.       dimension nelem(iel)     
  359.  
  360.       write(19,'(A,A,A)') '*ELSET, ELSET=',name
  361.  
  362.       il=iel/10
  363.       ir=mod(iel,10)
  364.  
  365.       if (il .gt. 0) then
  366.          do i=1,il
  367.             write(19,3) (nelem(j),j=10*(i-1)+1,10*i)
  368.          enddo
  369.       endif
  370.       if (ir .gt. 0) then
  371.          write(19,3) (nelem(j),j=10*il+1,iel)       !9/10/2009
  372.       endif
  373.  3    format(1x,i5,9(:',',1x,i4))
  374.  
  375.       return
  376.       end
  377.    
  378.       subroutine setup
  379.       implicit double precision (a-h,o-z)
  380.  
  381.       include 'common.f'
  382.              
  383.       pi = acos(-1.0d0)
  384.       emissivity = 0.1
  385.       h_env = 8.4d-5
  386.  
  387.       read(9,*) id_case, id_conf
  388.       read(9,*) id_m(1),d_in,thickness_p,carbon_eq,t0_p
  389.       read(9,*) id_f,velocity,pressure,t0_f,id_vl
  390.       if (id_conf .eq. 0) then  ! heat sink capacity
  391.          read(9,*) heat_in,igas,fl,oriface,dheight,&        efficiency,angle
  392.          read(9,*)
  393.       else
  394.  
  395.          read(9,*) id_m(3),id_ele,current,voltage,speed,&        efficiency,angle_w
  396.          read(9,*) id_m(2),d_branch_in,thickness_s,gap,gap2,&        t0_s,angle_wrtb
  397.          if (gap2 .lt. 10.d-3) gap2 = gap
  398.       endif
  399.       read(9,*) t_env
  400.  
  401.       if (carbon_eq .gt. 1.0d-3) then
  402.          read(9,*) w_b,w_c,w_cr,w_cu,w_mn,w_mo
  403.          read(9,*) w_ni,w_nb,w_n,w_si,w_v
  404.          read(9,*) w_b2,w_c2,w_cr2,w_cu2,w_mn2,w_mo2
  405.          read(9,*) w_ni2,w_nb2,w_n2,w_si2,w_v2
  406.       endif
  407.  
  408.     read(9,*)   DMESHSIZE,oldmesher, gs01,gs02
  409.  
  410.     if ( carbon_eq .le. 1.0d-3) then
  411.         oldmesher = 0.0
  412.     end if
  413.  
  414.       if (id_vl .eq. 1) then
  415.          t0 = 288.7               ! temperature in standard cond.
  416.          p0 = 1.03250d5           ! pressure in standard cond. (1 atm)
  417.          call zcompcalc(id_f,t0,p0,zcomp0)
  418.          pressure = pressure+p0
  419.          call zcompcalc(id_f,t0_f,pressure,zcomp)
  420.          zfact = p0*t0_f/(t0*pressure)*zcomp/zcomp0
  421.          velocity = velocity*zfact
  422.       endif
  423.  
  424.       ts(1) = 1700.0d0            ! carbon steel
  425.       tl(1) = 1780.0d0            ! carbon steel
  426.       hf(1) = 2.72d2              ! carbon steel
  427.       ts(2) = 1720.0d0            ! austenitic stainless steel
  428.       tl(2) = 1780.0d0            ! austenitic stainless steel
  429.       hf(2) = 2.47d2              ! austenitic stainless steel
  430.       ts(3) = 1720.0d0            ! duplex stainless steel
  431.       tl(3) = 1780.0d0            ! duplex stainless steel
  432.       hf(3) = 2.47d2              ! duplex stainless steel
  433.  
  434.       if (id_conf .eq. 0) then
  435.  
  436.          tcr1 = 5.231d2         ! 250 deg C
  437.          tcr2 = 3.731d2         ! 100 deg C
  438.          tcr3 = 4.481d2         ! 175 deg C
  439.  
  440.          if (heat_in .ne. 0.0) then
  441.             efficiency=0.40
  442.             heat_in=1.05506d3*heat_in*efficiency
  443.          else
  444.  
  445.          endif
  446.  
  447.          area_w = pi*25.4**2
  448.       else
  449.  
  450.          tcr1 = 1.073d3         ! 800 deg C
  451.          tcr2 = 7.731d2         ! 500 deg C
  452.          tcr3 = 8.108d2         ! 1000 deg F
  453.          heat_in = current*voltage
  454.          speed_ips = speed/25.4
  455.  
  456.          do i=6,12,6
  457.             write(i,5) "Welding Parameters:"
  458.             write(i,5) "Current = ",current, " A"
  459.             write(i,5) "Voltage = ",voltage, " V"
  460.             write(i,5) "Speed = ",speed, " mm/sec"
  461.             write(i,5) "Heat Input =", heat_in/speed_ips/1000.,&           " kJ/in"
  462.             write(i,5) "Arc Efficiency =", efficiency
  463.          enddo
  464.  5       format(1x,A,F6.2,1x,A)
  465.  
  466.          heat_in = heat_in * efficiency/0.75d0
  467.  
  468.          if (id_ele .eq. 1) then ! electrode type E7018
  469.             area_w = -3.556d-3 + 8.754d-7*heat_in/speed_ips
  470.          elseif (id_ele .eq. 2) then ! electrode type E7010
  471.             area_w = 1.109d-3 + 8.283d-7*heat_in/speed_ips
  472.          elseif (id_ele .eq. 3) then !  electrode type stainless
  473.             area_w = -1.65d-3 + 8.495d-7*heat_in/speed_ips
  474.          else
  475.             write(12,*) 'Invalid electrode type, analysis stopped!'
  476.             stop
  477.          endif
  478.  
  479.          heat_in = current*voltage*efficiency
  480.          area_w = area_w*25.4*25.4
  481.          write(12,*) 'weld area = ',area_w
  482.          if (area_w .le. 0.0d0) then
  483.             write(98,*) 'Estimated weld cross section area is ',area_w, &           ' mm'
  484.             write(98,*) 'Information about welding heat-input is '
  485.             write(98,*) 'incorrect.  Go back and change them!'
  486.             stop
  487.          endif
  488.          endif
  489.       IF(ID_CONF.NE.1) GO TO 2111  
  490.       XWELDLEG = 2.0D0*AREA_W**0.5D0
  491.       WELDXXX=THICKNESS_S+GAP
  492.       IF(XWELDLEG.LE.WELDXXX) GO TO 2111
  493.       write(12,*) 'WELD LEG LENGTH ',XWELDLEG,&           ' mm'
  494.       write(12,*) 'GREATER THAN SLEEVE PLUS GAP ', WELDXXX, 'mm'
  495.       write(12,*) 'incorrect.  CHANGE INPUTS!'
  496.       write(97,*) 'WELD LEG LENGTH ',XWELDLEG, &           ' mm'
  497.       write(97,*) 'GREATER THAN SLEEVE PLUS GAP ', WELDXXX, 'mm'
  498.       write(97,*) 'incorrect.  CHANGE INPUTS!'
  499.       STOP      
  500.                  
  501.  2111 write(*,*) 'Parameter reading and processing completed.'
  502.  
  503.       return
  504.       end
  505.  
  506.       subroutine init(nelem,ielem,inelem,&     nnode,t,told,f,fold)
  507.       implicit double precision (a-h,o-z)
  508.  
  509.       dimension :: ielem(4,*),inelem(4,*)
  510.       dimension :: t(nnode),told(nnode)
  511.       dimension :: f(nnode),fold(nnode)
  512.  
  513.       include 'common.f'
  514.  
  515.       do i=1,nelem
  516.  
  517.          id=ielem(2,i)
  518.  
  519.          if (id .eq. 1) then
  520.             do ii=1,4
  521.                told(inelem(ii,i))=t0_p
  522.                t(inelem(ii,i))=t0_p
  523.             enddo
  524.          elseif (id .eq. 2) then
  525.             do ii=1,4
  526.                told(inelem(ii,i))=t0_s
  527.                t(inelem(ii,i))=t0_s
  528.             end do
  529.          elseif (id .eq. 3) then
  530.             do ii=1,4
  531.                told(inelem(ii,i))=t_env
  532.                t(inelem(ii,i))=t_env
  533.             end do
  534.          endif
  535.       enddo
  536.  
  537.       do i=1,nnode
  538.          f(i)=0.0d0
  539.          fold(i)=0.0d0
  540.       enddo
  541.  
  542.       return
  543.       end
  544.  
  545.       subroutine jacob(x,vj,r_a,i_gaus,dphi)
  546.       implicit real *8 (a-h,o-z)
  547.       dimension x(2,4), a(2,2),r_a(2,2)
  548.       dimension dphi(4,4,2)
  549.  
  550.       do ii=1,2
  551.          do jj=1,2
  552.             a(ii,jj)=0.0d0
  553.             r_a(ii,jj)=0.0d0
  554.          enddo
  555.       enddo
  556.  
  557.       do i=1,4                  ! Gaussian points
  558.          do ii=1,2              ! local coordinates
  559.             do jj=1,2           ! global coordinates
  560.                a(ii,jj)=x(jj,i)*dphi(i,i_gaus,ii)+a(ii,jj)
  561.             enddo
  562.          enddo
  563.       enddo
  564.  
  565.       vj=a(1,1)*a(2,2)-a(1,2)*a(2,1)
  566.       if (vj .lt. 0.0d0) then
  567.          print *, 'Nagative Jacobian.  Analysis Stopped!'
  568.          stop
  569.       end if
  570.  
  571.       r_a(1,1)=a(2,2)/vj
  572.       r_a(2,1)=-a(2,1)/vj
  573.       r_a(1,2)=-a(1,2)/vj
  574.       r_a(2,2)=a(1,1)/vj
  575.  
  576.       return
  577.       end
  578.  
  579.       subroutine phi(iflag,value,i,j,k)
  580.       implicit real*8 (a-h,o-z)
  581.       parameter (r_gau=0.577350269189626)
  582.       dimension matrix(4,2)
  583.  
  584.       data ((matrix(ii,jj),ii=1,4),jj=1,2)&     /-1,1,1,-1,-1,-1,1,1/
  585.  
  586.       if (iflag .eq. 0) then
  587.          value=(1.0d0+matrix(j,1)*matrix(i,1)*r_gau)&        *(1.0d0+matrix(j,2)*matrix(i,2)*r_gau)
  588.       elseif (iflag .eq. 1) then
  589.          if (k .eq. 1) then
  590.             k1=2
  591.          endif
  592.          if (k .eq. 2) then
  593.             k1=1
  594.          endif
  595.          value=matrix(i,k)&        *(1.0d0+matrix(j,k1)*matrix(i,k1)*r_gau)
  596.       else
  597.          value=0.0d0
  598.       endif
  599.  
  600.       value=value*0.25d0
  601.  
  602.       return
  603.       end
  604.  
  605.       subroutine dflux(flux,time,anc,pmax,weldtime)
  606.       implicit real*8 (a-h,o-z)
  607.  
  608.       include 'common.f'
  609.  
  610.       if (time .gt. weldtime) then
  611.          flux = 0.0d0
  612.          return
  613.       endif
  614.  
  615.       dist = time*speed
  616.       if (dist .le. r_cc) then
  617.          dz = 1.0d0 - dist/r_cc
  618.          flux=pmax*exp(-3*dz*dz)
  619.       else
  620.          dz = (dist-r_cc)/(anc*r_cc)
  621.          flux=pmax*exp(-3*dz*dz)
  622.       endif
  623.  
  624.       return
  625.       end
  626.  
  627.       subroutine sflux(flux,x)
  628.       implicit real*8 (a-h,o-z)
  629.  
  630.       include 'common.f'
  631.  
  632.       flux = -heat_in/area_w
  633.      
  634.       return
  635.       end
  636.  
  637.  
  638.       subroutine fflux(flux,tsurface)
  639.       implicit real*8 (a-h,o-z)
  640.  
  641.       parameter (simga = 5.67d-14)
  642.  
  643.       include 'common.f'
  644.  
  645.       flux = h_env*(tsurface-t_env) + sigma*emissivity*&     (tsurface**4-t_env**4)
  646.  
  647.       return
  648.       end
  649.  
  650.       function cp(temp,ID)
  651.       implicit real*8 (a-h,o-z)
  652.  
  653.       if (id .eq. 1)  then    
  654.  
  655.          cp = cp_steel1(temp)
  656.  
  657.       elseif (id .eq. 2) then
  658.  
  659.          cp = cp_steel2(temp)
  660.  
  661.       elseif (id .eq. 3) then
  662.  
  663.          cp = cp_steel3(temp)
  664.  
  665.       endif
  666.  
  667.       end
  668.  
  669.       function cp_steel1(temp)
  670.       implicit real *8 (a-h,o-z)
  671.       dimension t(11),value(11)
  672.  
  673.       data (value(i),t(i),i=1,11) /&  486.0d-3, 100.0d0,&  498.0d-3, 200.0d0,&  515.0d-3, 300.0d0,&  536.0d-3, 400.0d0,&  557.0d-3, 500.0d0,&     586.0d-3, 600.0d0,&  619.0d-3, 700.0d0,& 691.0d-3, 800.0d0,&  695.0d-3, 900.0d0,& 691.0d-3, 100.0d1,&  700.0d-3, 300.0d1/
  674.  
  675.       t_c=temp-273.15d0
  676.       if (t_c .le. t(1)) then
  677.          cp_steel1=value(1)
  678.       elseif (t_c .ge. t(11)) then
  679.          cp_steel1=value(11)
  680.       else
  681.          do i=1,10
  682.             if ((t_c .gt. t(i)) .and. (t_c .le. t(i+1))) exit
  683.          enddo
  684.          cp_steel1=value(i)+(value(i+1)-value(i))&        *(t_c-t(i))/(t(i+1)-t(i))
  685.       endif
  686.  
  687.       return
  688.       end
  689.  
  690.       function cp_steel2(temp)
  691.       implicit real *8 (a-h,o-z)
  692.  
  693.       parameter (np=26)
  694.       dimension t(np),value(np)
  695.  
  696.       data (value(i),t(i),i=1,np)/
  697.      &  5.104E-01,  373., &   5.272E-01, 423.,&  5.314E-01,   473.,&  5.397E-01,   523.,&   5.481E-01,   573.,&    5.607E-01,   623.,&    5.690E-01,   673.,&  5.816E-01,   723.,&   5.941E-01,   773.,
  698.      &  6.276E-01,   823.,&   6.485E-01,   873.,&      6.318E-01,   923.,&  6.234E-01,   973.,&  6.276E-01,  1023.,&  6.402E-01,  1073.,&  6.485E-01,  1123.,&   6.402E-01,  1173.,&      6.485E-01,  1223.,&   6.485E-01,  1273.,&   6.527E-01,  1323.,&  6.611E-01,  1373.,&   6.653E-01,  1423.,&   6.736E-01,  1473.,&   6.778E-01,  1523.,&  6.820E-01,  1573.,&   7.000E-01,  3000./
  699.  
  700.       if (temp .le. t(1)) then
  701.          cp_steel2 = value(1)
  702.       elseif (temp .ge. t(np)) then
  703.          cp_steel2 = value(np)
  704.       else
  705.          do i=1,np-1
  706.             if ((temp .gt. t(i)) .and. (temp .le. t(i+1))) exit
  707.          enddo
  708.          fac = (temp-t(i))/(t(i+1)-t(i))
  709.          cp_steel2 = value(i) + (value(i+1)-value(i))*fac
  710.       endif
  711.  
  712.       return
  713.       end
  714.  
  715.       function cp_steel3(temp)
  716.       implicit real *8 (a-h,o-z)
  717.       dimension t(11),value(11)
  718.  
  719.       data (t(i),value(i),i=1,11) /
  720.      &     100.0d0, 486.0d-3,
  721.      &     200.0d0, 498.0d-3,
  722.      &     300.0d0, 515.0d-3,
  723.      &     400.0d0, 536.0d-3,
  724.      &     500.0d0, 557.0d-3,
  725.      &     600.0d0, 586.0d-3,
  726.      &     700.0d0, 619.0d-3,
  727.      &     800.0d0, 691.0d-3,
  728.      &     900.0d0, 695.0d-3,
  729.      &     100.0d1, 691.0d-3,
  730.      &     300.0d1, 700.0d-3/
  731.  
  732.       t_c=temp-273.15d0
  733.       if (t_c .lt. t(1)) then
  734.          cp_steel3=value(1)
  735.       elseif (t_c .ge. t(8)) then
  736.          cp_steel3=value(8)
  737.       else
  738.          do i=1,7
  739.             if ((t_c .gt. t(i)) .and. (t_c .le. t(i+1))) exit
  740.          enddo
  741.          cp_steel3=value(i)+(value(i+1)-value(i)) &        *(t_c-t(i))/(t(i+1)-t(i))
  742.       endif
  743.  
  744.       return
  745.       end
  746.  
  747.       function dens(ID)
  748.       implicit real *8 (a-h,o-z)
  749.  
  750.       if (id .eq. 1)  then      ! carbon steel
  751.          dens = 7.820E-03
  752.       elseif (id .eq. 2) then   ! austenitic stainless steel
  753.          dens = 7.820E-03
  754.       elseif (id .eq. 3) then   ! duplex stainless steel
  755.          dens = 7.820E-03
  756.       endif
  757.  
  758.       end
  759.       subroutine h(xx,temp,h_con,id)
  760.       implicit real*8 (a-h,o-z)
  761.  
  762.       if (id .eq. 1) then       ! air
  763.          call h_air(xx,temp,h_con)
  764.       elseif (id .eq. 2) then   ! gas methane
  765.          call h_methane1(xx,temp,h_con)
  766.       elseif (id .eq. 3) then   ! hydrogen
  767.          call h_hydrogen(xx,temp,h_con)
  768.       elseif (id .eq. 4) then   ! steam
  769.          call h_steam(xx,temp,h_con)
  770.       elseif (id .eq. 5) then   ! ethylene
  771.          call h_ethyl1(xx,temp,h_con)
  772.  
  773.       elseif (id .eq. 11) then   ! ethyl alcohol
  774.          call h_ethyl2(xx,temp,h_con)
  775.       elseif (id .eq. 12) then   ! water
  776.          call h_water(xx,temp,h_con)
  777.       elseif (id .eq. 13) then   ! ammonia
  778.          call h_ammonia(xx,temp,h_con)
  779.       elseif (id .eq. 14) then   ! propane
  780.          call h_propane(xx,temp,h_con)
  781.       elseif (id .eq. 15) then  ! fuel oil
  782.          call h_foil(xx,temp,h_con)
  783.       elseif (id .eq. 16) then  ! gasoline
  784.          call h_gasoline(xx,temp,h_con)
  785.       elseif (id .eq. 17) then  ! liquid methane
  786.          call h_methane2(xx,temp,h_con)
  787.       elseif (id .eq. 18) then  ! crude oil
  788.          call h_coil(xx,temp,h_con)
  789.       elseif (id .eq. 19) then  ! motor oil
  790.          call h_moil(xx,temp,h_con)
  791.       else
  792.          print *, 'FLOW MATERIAL PROPERTIES NOT AVAILABLE.'
  793.          print *, 'ANALYSIS STOPED!'
  794.       endif
  795.  
  796.       return
  797.       end
  798.  
  799.       subroutine h_air(xx,temp,h)
  800.       implicit real *8 (a-h,o-z)
  801.       include 'common.f'
  802.       integer iflag
  803.       save iflag,pr,R_e,c_p,density,viscosity,tk_air,beta
  804.  
  805.       d_in_m=d_in/1.0d3
  806.       if (iflag .eq. 0) then
  807.          iflag=1
  808.  
  809.          beta=1.0d0/t0_f
  810.          pr=0.7d0
  811.          c_p=1.0d3
  812.          viscosity=0.01716d-3*(t0_f/273.16d0)**1.5d0&        *383.72d0/(t0_f+110.56d0)
  813.          density=pressure*29/8134.0d0/t0_f
  814.          R_e=density*d_in_m*velocity/viscosity
  815.          tk_air=viscosity*c_p/pr
  816.       endif
  817.  
  818.       if (R_e .gt. 5000) then
  819.  
  820.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  821.          factor=1.0d0+0.318d0*(d_in/xx)**0.75d0
  822.          h_f=factor*vnu*tk_air/d_in_m
  823.       else if (r_e.le.2300) then
  824.  
  825.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  826.          h_f=vnu*tk_air/d_in_m
  827.       else
  828.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  829.          factor=1.0d0+0.318d0*(d_in/xx)**0.75d0
  830.          h1=factor*vnu*tk_air/d_in_m
  831.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  832.          h2=vnu*tk_air/d_in_m
  833.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  834.       endif
  835.  
  836.       delt=temp-t0_f
  837.       if (delt .le. 0.0d0) then
  838.          gr=0.0d0
  839.          h_n=0.0d0
  840.       else
  841.          gr=d_in_m**3*beta*delt*density*&        9.8d0*density/viscosity/viscosity
  842.          if (gr .ge. 1.0d9) then
  843.             vnu=0.16d0*(gr*pr)**0.333333d0
  844.             h_n=vnu*tk_air/d_in_m
  845.          else
  846.             vnu=0.59d0*(gr*pr)**0.25d0
  847.             h_n=vnu*tk_air/d_in_m
  848.          endif
  849.       endif
  850.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  851.       h=h*1.0d-6
  852.  
  853.       return
  854.       end
  855.  
  856.       subroutine h_ammonia(xx,temp,h)
  857.       implicit real *8 (a-h,o-z)
  858.       include 'common.f'
  859.  
  860.       d_in_m=d_in/1.0d3
  861.       pr=2.0d0
  862.       beta=2.45d-3
  863.       density=703.69d0+(t0_f-273.15d0-50.0d0) &     *(564.33d0-703.69d0)/100.0d0
  864.       c_p=4.635d3
  865.       tk_ammonia=0.547d0+(t0_f-273.15d0-50.0d0) &     *(0.476d0-0.547d0)/100.0d0
  866.       viscosity=pr*tk_ammonia/c_p
  867.       r_e=density*d_in_m*velocity/viscosity
  868.       if (R_e .gt. 5000) then
  869.  
  870.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  871.          factor=1.0d0+0.125d0*(d_in/xx)
  872.          h_f=1.0d0*vnu*tk_ammonia/d_in_m
  873.       else if (r_e.le.2300) then
  874.  
  875.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  876.          h_f=vnu*tk_ammonia/d_in_m
  877.       else
  878.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  879.          factor=1.0d0+0.125d0*(d_in/xx)
  880.          h1=factor*vnu*tk_ammonia/d_in_m
  881.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  882.          h2=vnu*tk_ammonia/d_in_m
  883.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  884.       end if
  885.  
  886.       delt=temp-t0_f
  887.       if (delt.le.0.0d0) then
  888.          gr=0.0d0
  889.          h_n=0.0d0
  890.       else
  891.          gr=d_in_m**3*beta*delt*density*&        9.8d0*density/viscosity/viscosity
  892.          if (gr.ge.1.0d9) then
  893.             vnu=0.16d0*(gr*pr)**0.333333d0
  894.             h_n=vnu*tk_ammonia/d_in_m
  895.          else
  896.             vnu=0.59d0*(gr*pr)**0.25d0
  897.             h_n=vnu*tk_ammonia/d_in_m
  898.          end if
  899.       end if
  900.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  901.       h=h*1.0d-6
  902.  
  903.       return
  904.       end
  905.      
  906.       subroutine h_coil(xx,temp,h)
  907.       implicit real *8 (a-h,o-z)
  908.       include 'common.f'
  909.  
  910.       d_in_m=d_in/1.0d3
  911.       beta=0.70d-3
  912.       density=899.00d0+(t0_f-273.15d0)&     *(805.89d0-889.00d0)/160.0d0
  913.       c_p=2.000d3
  914.       tk_coil=0.140d0                            
  915.       viscosity=0.00428d0+(t0_f-273.15d0)&     *(0.056d-4-0.00428d0)/160.0d0
  916.       r_e=density*d_in_m*velocity/viscosity
  917.       pr=viscosity*c_p/tk_coil
  918.       if (R_e.gt.5000) then     ! turbulent flow
  919.                                 ! vnu=0.023*Re^0.8*Pr^0.333
  920.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  921.          factor=1.0d0+0.125d0*(d_in/xx)
  922.          h_f=1.0d0*vnu*tk_coil/d_in_m
  923.       else if (r_e.le.2300) then ! laminar flow
  924.                                 ! vnu=3.65+...........
  925.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  926.          h_f=vnu*tk_coil/d_in_m
  927.       else
  928.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  929.          factor=1.0d0+0.125d0*(d_in/xx)
  930.          h1=factor*vnu*tk_coil/d_in_m
  931.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  932.          h2=vnu*tk_coil/d_in_m
  933.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  934.       end if
  935.  
  936.       delt=temp-t0_f
  937.       if (delt.le.0.0d0) then
  938.          gr=0.0d0
  939.          h_n=0.0d0
  940.       else
  941.          gr=d_in_m**3*beta*delt*density*&        9.8d0*density/viscosity/viscosity
  942.          if (gr.ge.1.0d9) then
  943.             vnu=0.16d0*(gr*pr)**0.333333d0
  944.             h_n=vnu*tk_coil/d_in_m
  945.          else
  946.             vnu=0.59d0*(gr*pr)**0.25d0
  947.             h_n=vnu*tk_coil/d_in_m
  948.          end if
  949.       end if
  950.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  951.       h=h*1.0d-6
  952.  
  953.       return
  954.       end
  955.  
  956.       subroutine h_ethyl1(xx,temp,h)
  957.       implicit real*8 (a-h,o-z)
  958.       include 'common.f'
  959.  
  960.       integer iflag
  961.       save iflag, density, c_p, tk_C2H4, viscosity, R_e, Pr, beta
  962.  
  963.       d_in_m = d_in / 1.0D+3
  964.       if (iflag .eq. 0) then
  965.         iflag = 1
  966.         beta = 1.0D0 / t0_f
  967.         density = 28.0D0*pressure / (8.314D+3*t0_f)
  968.         c_p = 1.535D+3
  969.         Pr = 0.75D0
  970.         viscosity = 14.3D-6
  971.         tk_C2H4 = c_p * viscosity / Pr
  972.         R_e = density * d_in_m * velocity / viscosity
  973.       end if
  974.  
  975.       if (R_e > 5000.0D0) then
  976.         vnu = 0.023D0 * (R_e**0.8D0) * (Pr**0.33333D0)
  977.         h_f = vnu * tk_C2H4 / d_in_m
  978.       elseif (r_e <= 2300.0D0) then
  979.         vnu = 3.65D0 + (0.0668D0*d_in*R_e*Pr/xx)
  980.      1      /(1.0D0+0.04D0*(d_in*R_e*Pr/xx)**0.66667D0)
  981.         h_f = vnu * tk_C2H4 / d_in_m
  982.       else
  983.         vnu = 0.023D0 * (R_e**0.8D0) * (Pr**0.33333D0)
  984.         h1 = vnu * tk_C2H4 / d_in_m
  985.         vnu = 3.65D0 + (0.0668D0*d_in*R_e*Pr/xx)
  986.      1      /(1.0D0+0.04D0*(d_in*R_e*Pr/xx)**0.66667D0)
  987.         h2 = vnu * tk_C2H4 / d_in_m
  988.         h_f = h2 + (h1-h2)*(R_e-2300.0D0)/(5000.0D0-2300.0D0)
  989.       endif
  990.  
  991.       delt = temp - t0_f
  992.       if (delt <= 0.0D0) then
  993.         gr = 0.0D0
  994.         h_n = 0.0D0
  995.       else
  996.         gr = d_in_m**3.0D0 * beta * delt * density *
  997.      1      9.8D0 * density / viscosity / viscosity
  998.         if (gr >= 1.0D+9) then
  999.             vnu = 0.16D0 * (gr*Pr)**0.33333d0
  1000.             h_n = vnu * tk_C2H4 / d_in_m
  1001.          else
  1002.             vnu = 0.59D0 * (gr*Pr)**0.25D0
  1003.             h_n = vnu * tk_C2H4 / d_in_m
  1004.          end if
  1005.       end if
  1006.  
  1007.       h = (h_f*h_f*h_f + h_n*h_n*h_n)**0.33333D0
  1008.       h = h*1.0D-6
  1009.       return
  1010.       end
  1011.  
  1012.       subroutine h_ethyl2(xx,temp,h)
  1013.       implicit real *8 (a-h,o-z)
  1014.       include 'common.f'
  1015.  
  1016.       d_in_m=d_in/1.0d3
  1017.       beta=1.10d-3
  1018.       density=806.00d0+(t0_f-273.15d0) &     *(383.00d0-806.00d0)/240.0d0
  1019.       c_p=1.884d3+(4664.0d0-1884.0d0) &     *(t0_f-373.15d0)/260.0d0
  1020.       tk_ethyl2=0.180d0                            
  1021.       viscosity=470.0d-4+(t0_f-273.15d0)&     *(5.03d-4-470.0d-4)/170.0d0
  1022.       pr=viscosity*c_p/tk_ethyl2
  1023.       r_e=density*d_in_m*velocity/viscosity
  1024.       if (R_e.gt.5000) then     !turbulent flow
  1025.                                 ! vnu=0.023*Re^0.8*Pr^0.333
  1026.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1027.          factor=1.0d0+0.125d0*(d_in/xx)
  1028.          h_f=1.0d0*vnu*tk_ethyl2/d_in_m
  1029.       else if (r_e.le.2300) then !laminar flow
  1030.                                 ! vnu=3.65+...........
  1031.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1032.          h_f=vnu*tk_ethyl2/d_in_m
  1033.       else
  1034.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1035.          factor=1.0d0+0.125d0*(d_in/xx)
  1036.          h1=factor*vnu*tk_ethyl2/d_in_m
  1037.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx) &        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1038.          h2=vnu*tk_ethyl2/d_in_m
  1039.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  1040.       end if
  1041.  
  1042.       delt=temp-t0_f
  1043.       if (delt.le.0.0d0) then
  1044.          gr=0.0d0
  1045.          h_n=0.0d0
  1046.       else
  1047.          gr=d_in_m**3*beta*delt*density*&        9.8d0*density/viscosity/viscosity
  1048.          if (gr.ge.1.0d9) then
  1049.             vnu=0.16d0*(gr*pr)**0.333333d0
  1050.             h_n=vnu*tk_ethyl2/d_in_m
  1051.          else
  1052.             vnu=0.59d0*(gr*pr)**0.25d0
  1053.             h_n=vnu*tk_ethyl2/d_in_m
  1054.          end if
  1055.       end if
  1056.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  1057.       h=h*1.0d-6
  1058.  
  1059.       return
  1060.       end
  1061.  
  1062.       subroutine h_foil(xx,temp,h)
  1063.       implicit real *8 (a-h,o-z)
  1064.       include 'common.f'
  1065.       integer iflag
  1066.       save iflag
  1067.  
  1068.       if (iflag .eq. 0) then
  1069.          iflag=1
  1070.          density=850.0d0
  1071.          c_p=200.0d0
  1072.          tk=0.14d0
  1073.       end if
  1074.  
  1075.       h=2300.0d-6
  1076.  
  1077.       return
  1078.       end
  1079.  
  1080.       subroutine h_gasoline(xx,temp,h)
  1081.       implicit real *8 (a-h,o-z)
  1082.       include 'common.f'
  1083.  
  1084.       d_in_m=d_in/1.0d3
  1085.       beta=1.14d-3
  1086.       density=718.00d0+(t0_f-273.15d0)&     *(337.00d0-718.00d0)/290.0d0
  1087.       c_p=2.177d3
  1088.       tk_gasoline=0.140d0                            
  1089.       viscousity=7.00d-4+(t0_f-273.15d0)&     *(2.08d-4-7.0d-4)/120.0d0
  1090.       pr=viscousity*c_p/tk_gasoline
  1091.       r_e=density*d_in_m*velocity/viscousity
  1092.       if (R_e.gt.5000) then     ! turbulent flow
  1093.                                 ! vnu=0.023*Re^0.8*Pr^0.333
  1094.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1095.          factor=1.0d0+0.125d0*(d_in/xx)
  1096.          h_f=1.0d0*vnu*tk_gasoline/d_in_m
  1097.       else if (r_e.le.2300) then ! laminar flow
  1098.                                 ! vnu=3.65+...........
  1099.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1100.          h_f=vnu*tk_gasoline/d_in_m
  1101.       else
  1102.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1103.          factor=1.0d0+0.125d0*(d_in/xx)
  1104.          h1=factor*vnu*tk_gasoline/d_in_m
  1105.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1106.          h2=vnu*tk_gasoline/d_in_m
  1107.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  1108.       end if
  1109.  
  1110.       delt=temp-t0_f
  1111.       if (delt.le.0.0d0) then
  1112.          gr=0.0d0
  1113.          h_n=0.0d0
  1114.       else
  1115.          gr=d_in_m**3*beta*delt*density* &        9.8d0*density/viscousity/viscousity
  1116.          if (gr.ge.1.0d9) then
  1117.             vnu=0.16d0*(gr*pr)**0.333333d0
  1118.             h_n=vnu*tk_gasoline/d_in_m
  1119.          else
  1120.             vnu=0.59d0*(gr*pr)**0.25d0
  1121.             h_n=vnu*tk_gasoline/d_in_m
  1122.          end if
  1123.       end if
  1124.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  1125.       h=h*1.0d-6
  1126.  
  1127.       return
  1128.       end
  1129.  
  1130.       subroutine h_hydrogen(xx,temp,h)
  1131.       implicit real *8 (a-h,o-z)
  1132.       include 'common.f'
  1133.  
  1134.       d_in_m=d_in/1.0d3
  1135.       beta=1.0d0/t0_f
  1136.       pr=0.7d0
  1137.       c_p=15.5d3
  1138.       viscosity=0.008411d-3*(t0_f/273.16d0)**1.5d0 &     *369.81d0/(t0_f+96.667d0)
  1139.       density=pressure*2/8134.0d0/t0_f
  1140.       R_e=density*d_in_m*velocity/viscosity
  1141.       tk_hyd=viscosity*c_p/pr
  1142.       if (R_e.gt.5000) then     ! turbulent flow
  1143.                                 ! vnu=0.023*Re^0.8*Pr^0.333
  1144.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1145.          factor=1.0d0+0.318d0*(d_in/xx)**0.75d0
  1146.          h_f=factor*vnu*tk_hyd/d_in_m
  1147.       else if (r_e.le.2300) then ! laminar flow
  1148.                                 ! vnu=3.65+...........
  1149.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx) &        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1150.          h_f=vnu*tk_hyd/d_in_m
  1151.       else
  1152.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1153.          factor=1.0d0+0.318d0*(d_in/xx)**0.75d0
  1154.          h1=factor*vnu*tk_hyd/d_in_m
  1155.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1156.          h2=vnu*tk_hyd/d_in_m
  1157.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  1158.       end if
  1159.  
  1160.       delt=temp-t0_f
  1161.       if (delt.le.0.0d0) then
  1162.          gr=0.0d0
  1163.          h_n=0.0d0
  1164.       else
  1165.          gr=d_in_m**3*beta*delt*density*&        9.8d0*density/viscosity/viscosity
  1166.          if (gr.ge.1.0d9) then
  1167.             vnu=0.16d0*(gr*pr)**0.333333d0
  1168.             h_n=vnu*tk_hyd/d_in_m
  1169.          else
  1170.             vnu=0.59d0*(gr*pr)**0.25d0
  1171.             h_n=vnu*tk_hyd/d_in_m
  1172.          end if
  1173.       end if
  1174.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  1175.       h=h*1.0d-6
  1176.  
  1177.       return
  1178.       end
  1179.  
  1180.       subroutine h_methane1(xx,temp,h)
  1181.       implicit real *8 (a-h,o-z)
  1182.       include 'common.f'
  1183.       integer, save :: iflag=0
  1184.       save pr,R_e,c_p,density,viscosity,tk_methane,beta
  1185.  
  1186.       d_in_m=d_in/1.0d3
  1187.       if (iflag .eq. 0) then
  1188.          iflag=1
  1189.  
  1190.          beta=1.0d0/temp
  1191.          c_p=2165.4d0+(t0_f-273.0d0)*3202.0d0/1200.0d0
  1192.          viscosity=7.4d-6+(t0_f-193.0d0)*15.24d-6/579.0d0
  1193.          density=pressure*16./8134.0d0/t0_f
  1194.          tk_methane=0.01291d0+(t0_f-123.15d0)*0.02431d0/2.0d2
  1195.          R_e=density*d_in_m*velocity/viscosity
  1196.          pr=viscosity*c_p/tk_methane
  1197.       end if
  1198.  
  1199.       if (R_e.gt.5000) then     ! turbulent flow
  1200.  
  1201.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1202.          h_f=vnu*tk_methane/d_in_m
  1203.          h_f=h_f*(1.0d0+0.318d0*(d_in/xx)**0.75d0)
  1204.       else if (r_e.le.2300) then ! laminar flow
  1205.  
  1206.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx) &        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1207.          h_f=vnu*tk_methane/d_in_m
  1208.       else
  1209.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1210.          h1=vnu*tk_methane/d_in_m
  1211.          h1=h1*(1.0d0+0.318d0*(d_in/xx)**0.75d0)
  1212.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1213.          h2=vnu*tk_methane/d_in_m
  1214.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  1215.       end if
  1216.  
  1217.       delt=temp-t0_f
  1218.       if (delt.le.0.0d0) then
  1219.          gr=0.0d0
  1220.          h_n=0.0d0
  1221.       else
  1222.          gr=d_in_m**3*beta*delt*density*&        9.8d0*density/viscosity/viscosity
  1223.          if (gr.ge.1.0d9) then
  1224.             vnu=0.16d0*(gr*pr)**0.333333d0
  1225.             h_n=vnu*tk_methane/d_in_m
  1226.          else
  1227.             vnu=0.59d0*(gr*pr)**0.25d0
  1228.             h_n=vnu*tk_methane/d_in_m
  1229.          end if
  1230.       end if
  1231.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  1232.       viscosity_w=7.4d-6+(temp-193.0d0)*15.24d-6/579.0d0
  1233.       h=h*1.0d-6*(viscosity/viscosity_w)**0.14d0
  1234.  
  1235.       return
  1236.       end
  1237.  
  1238.       subroutine h_methane2(x,temp,h)
  1239.       implicit real *8 (a-h,o-z)
  1240.       PARAMETER (Ta=536.7,Tb=534.9,g=32.17,D=0.8645,V=16.9,
  1241.      $     Pf=600.0,a11=32.654,a21=-2.43437E-1,a31=7.01127E-4,
  1242.      $     a41=-8.96041E-7,a51=4.28695E-10,     a12=-9.24685E-2,
  1243.      $     a22=7.04526E-4,a32=-2.02503E-6,a42=2.5938E-9,
  1244.      $     a52=-1.24701E-12,  a13=3.88139E-5,a23=-3.01735E-7,
  1245.      $     a33=8.8031E-10,a43=-1.141E-12,a53=5.54013E-16)
  1246.  
  1247.       t=temp*1.8+32.0+497.5
  1248.       f1=a11+a21*Tb+a31*Tb**2.0+a41*Tb**3.0+a51*Tb**4.0
  1249.       f2=a12+a22*Tb+a32*Tb**2.0+a42*Tb**3.0+a52*Tb**4.0
  1250.       f3=a13+a23*Tb+a33*Tb**2.0+a43*Tb**3.0+a53*Tb**4.0
  1251.       Z=f1+f2*(Pf+14.7)+f3*(Pf+14.7)**2.0
  1252.       Cp=0.4366E-3*Tb+0.3004
  1253.       cod=0.1255E-7*Tb**2.0+0.3214E-4*Tb-0.6064E-3
  1254.       u=4.966E-7*Tb**1.5/(Tb+295.2)
  1255.       belta=2.0/(T+Tb)
  1256.       rou=144.0*(Pf+14.7)/(96.4*Tb*Z)
  1257.       uw=4.966E-7*T**1.5/(T+295.2)
  1258.       Re=rou*V*D/u    
  1259.       Pr=3600.0*u*Cp/cod
  1260.  
  1261.       IF (Re .GE. 5000.0) THEN
  1262.          C1=3600.0*Cp*V*rou*0.023*(Re**-0.2)*
  1263.      $        (Pr**(-2.0/3.0))*(u/uw)**0.14
  1264.          Hf=(1+0.318*(D/X)**0.75)*C1
  1265.       ELSE IF (Re .LE. 2100.0) THEN
  1266.          C2=1.615*(Re*Pr/(X/D))**(1.0/3.0)
  1267.          Hf=(cod/D)*((C2**5.0+4.364**5)**0.2)*(u/uw)**0.14
  1268.       ELSE  
  1269.          C1=3600.0*Cp*V*rou*0.023*(5000.0**-0.2)*
  1270.      $        (Pr**(-2.0/3.0))*(u/uw)**0.14
  1271.          HT=(1+0.318*(D/X)**0.75)*C1
  1272.          C2=1.615*(2100.0*Pr/(X/D))**(1.0/3.0)
  1273.          HL=(cod/D)*((C2**5.0+4.364**5)**0.2)*(u/uw)**0.14
  1274.          Hf=HL+(Re-2100.0)*(HT-HL)/2900.0
  1275.       END IF
  1276.  
  1277.       Tc=(T+Tb)/2.0
  1278.       f1n=a11+a21*Tc+a31*Tc**2.0+a41*Tc**3.0+a51*Tc**4.0
  1279.       f2n=a12+a22*Tc+a32*Tc**2.0+a42*Tc**3.0+a52*Tc**4.0
  1280.       f3n=a13+a23*Tc+a33*Tc**2.0+a43*Tc**3.0+a53*Tc**4.0
  1281.       Zn=f1n+f2n*(Pf+14.7)+f3n*(Pf+14.7)**2.0
  1282.       Cpn=0.4366E-3*Tc+0.3004
  1283.       con=0.1255E-7*Tc**2.0+0.3214E-4*Tc-0.6064E-3
  1284.       un=4.966E-7*Tc**1.5/(Tc+295.2)
  1285.       ron=144.0*(Pf+14.7)/(96.4*Tc*Zn)
  1286.       Gr=(D**3.0)*g*belta*(T-Tb)*(ron/un)**2.0    
  1287.       Prn=3600.0*un*Cpn/con
  1288.       GP=Gr*Prn
  1289.       IF (GP .GT. 3.0E10) THEN
  1290.          an=0.5
  1291.          C=0.0362
  1292.       ELSE
  1293.          an=0.25
  1294.          C=0.27
  1295.       END IF
  1296.  
  1297.       Hn=(con/D)*C*GP**an
  1298.      
  1299.       h=5.6788E-6*(Hf**3.0+Hn**3.0)**(1.0/3.0)
  1300.  
  1301.       h=10000.0d-6
  1302.       return
  1303.       end
  1304.  
  1305.       subroutine h_moil(xx,temp,h)
  1306.       implicit real *8 (a-h,o-z)
  1307.       include 'common.f'
  1308.  
  1309.       d_in_m=d_in/1.0d3
  1310.       beta=0.70d-3
  1311.       density=899.00d0+(t0_f-273.15d0)&     *(805.89d0-889.00d0)/160.0d0
  1312.       c_p=2.000d3
  1313.       tk_moil=0.140d0                            
  1314.       viscosity=7962.2d-4+(t0_f-293.15d0)&     *(65.02d-4-7962.2d-4)/120.0d0
  1315.       r_e=density*d_in_m*velocity/viscosity
  1316.       pr=viscosity*c_p/tk_moil
  1317.       if (R_e.gt.5000) then
  1318.  
  1319.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1320.          factor=1.0d0+0.125d0*(d_in/xx)
  1321.          h_f=1.0d0*vnu*tk_moil/d_in_m
  1322.       else if (r_e.le.2300) then
  1323.  
  1324.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1325.          h_f=vnu*tk_moil/d_in_m
  1326.       else
  1327.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1328.          factor=1.0d0+0.125d0*(d_in/xx)
  1329.          h1=factor*vnu*tk_moil/d_in_m
  1330.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx) &        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1331.          h2=vnu*tk_moil/d_in_m
  1332.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  1333.       end if
  1334.  
  1335.       delt=temp-t0_f
  1336.       if (delt.le.0.0d0) then
  1337.          gr=0.0d0
  1338.          h_n=0.0d0
  1339.       else
  1340.          gr=d_in_m**3*beta*delt*density*&        9.8d0*density/viscosity/viscosity
  1341.          if (gr.ge.1.0d9) then
  1342.             vnu=0.16d0*(gr*pr)**0.333333d0
  1343.             h_n=vnu*tk_moil/d_in_m
  1344.          else
  1345.             vnu=0.59d0*(gr*pr)**0.25d0
  1346.             h_n=vnu*tk_moil/d_in_m
  1347.          end if
  1348.       end if
  1349.  
  1350.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  1351.       h=h*1.0d-6
  1352.  
  1353.       return
  1354.       end
  1355.  
  1356.       subroutine h_propane(xx,temp,h)
  1357.       implicit real *8 (a-h,o-z)
  1358.  
  1359.       h=230.0d-6
  1360.  
  1361.       return
  1362.       end
  1363.  
  1364.       subroutine h_steam(xx,temp,h)
  1365.       implicit real *8 (a-h,o-z)
  1366.       include 'common.f'
  1367.       integer iflag
  1368.       save iflag,pr,R_e,c_p,density,viscosity,tk_steam,beta
  1369.  
  1370.       d_in_m=d_in/1.0d3
  1371.       if (iflag.eq.0) then
  1372.          iflag=1
  1373.          beta=1.0d0/t0_f
  1374.          c_p=2.0d3
  1375.          pr=0.85d0          
  1376.          viscosity=134.0d-7+(t0_f-400.0d0)*144.2d-7/4.0d2
  1377.          density=pressure*18/8134.0d0/t0_f
  1378.          R_e=density*d_in_m*velocity/viscosity
  1379.          tk_steam=viscosity*c_p/pr
  1380.       end if
  1381.       if (R_e.gt.5000) then     ! turbulent flow
  1382.                                 ! vnu=0.026*Re^0.8*Pr^0.333
  1383.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1384.          h_f=vnu*tk_steam/d_in_m
  1385.       else if (r_e.le.2300) then ! laminar flow
  1386.                                 ! vnu=3.65+...........
  1387.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1388.          h_f=vnu*tk_steam/d_in_m
  1389.       else
  1390.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1391.          h1=vnu*tk_steam/d_in_m
  1392.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx) &        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1393.          h2=vnu*tk_steam/d_in_m
  1394.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  1395.       end if
  1396.  
  1397.       delt=temp-t0_f
  1398.       if (delt.le.0.0d0) then
  1399.          gr=0.0d0
  1400.          h_n=0.0d0
  1401.       else
  1402.          gr=d_in_m**3*beta*delt*density* &        9.8d0*density/viscosity/viscosity
  1403.          if (gr.ge.1.0d9) then
  1404.             vnu=0.16d0*(gr*pr)**0.333333d0
  1405.             h_n=vnu*tk_steam/d_in_m
  1406.          else
  1407.             vnu=0.59d0*(gr*pr)**0.25d0
  1408.             h_n=vnu*tk_steam/d_in_m
  1409.          end if
  1410.       end if
  1411.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  1412.       h=h*1.0d-6
  1413.  
  1414.       return
  1415.       end
  1416.  
  1417.       subroutine h_water(xx,temp,h)
  1418.       implicit real *8 (a-h,o-z)
  1419.       include 'common.f'
  1420.       integer iflag
  1421.       save iflag,pr,R_e,c_p,density,viscosity,tk_water,beta
  1422.  
  1423.       d_in_m=d_in/1.0d3
  1424.       if (iflag.eq.0) then
  1425.          iflag=1
  1426.  
  1427.          beta=1.8d-4
  1428.          c_p=4.2d3
  1429.          t_c=t0_f-273.16d0-8.435d0
  1430.          vvv=0.021482d0*(t_c+(t_c*t_c+8078.4)**0.5d0)-1.2d0
  1431.          viscosity=1.0d-3/vvv
  1432.          density=1.0d3
  1433.          tk_water=0.65d0
  1434.          pr=c_p*viscosity/tk_water
  1435.          R_e=density*d_in_m*velocity/viscosity
  1436.       end if
  1437.       if (R_e.gt.5000) then     ! turbulent flow
  1438.                                 ! vnu=0.026*Re^0.8*Pr^0.333
  1439.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1440.          factor=1.0d0+0.125d0*(d_in/xx)  
  1441.          h_f=1.0d0*vnu*tk_water/d_in_m
  1442.       else if (r_e.le.2300) then ! laminar flow
  1443.                                 ! vnu=3.65+...........
  1444.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx) &        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1445.          h_f=vnu*tk_water/d_in_m
  1446.       else
  1447.          vnu=0.023d0*r_e**0.8d0*pr**0.33333d0
  1448.          factor=1.0d0+0.125d0*(d_in/xx)  
  1449.          h1=factor*vnu*tk_water/d_in_m
  1450.          vnu=3.65d0+(0.0668d0*d_in*r_e*pr/xx)&        /(1.0d0+0.04d0*(d_in*r_e*pr/xx)**0.66667d0)
  1451.          h2=vnu*tk_water/d_in_m
  1452.          h_f=h2+(h1-h2)*(r_e-2300.0d0)/(5000.0d0-2300.0d0)
  1453.       end if
  1454.  
  1455.       delt=temp-t0_f
  1456.       if (delt.le.0.0d0) then
  1457.          gr=0.0d0
  1458.          h_n=0.0d0
  1459.       else
  1460.          gr=d_in_m**3*beta*delt*density*&        9.8d0*density/viscosity/viscosity
  1461.          if (gr.ge.1.0d9) then
  1462.             vnu=0.16d0*(gr*pr)**0.333333d0
  1463.             h_n=vnu*tk_water/d_in_m
  1464.          else
  1465.             vnu=0.59d0*(gr*pr)**0.25d0
  1466.             h_n=vnu*tk_water/d_in_m
  1467.          end if
  1468.       end if
  1469.  
  1470.       h=(h_f*h_f*h_f+h_n*h_n*h_n)**0.33333d0
  1471.       h=h*1.0d-6
  1472.  
  1473.       return
  1474.       end
  1475.  
  1476.       subroutine mesh00(thickness,inode,coord,nnode,&     ielem,inelem,nelem,kp)
  1477.  
  1478.       implicit double precision (a-h,o-z)
  1479.  
  1480.       dimension :: inode(*),coord(2,*)
  1481.       dimension :: ielem(4,*),inelem(4,*)
  1482.       dimension :: kp(*)
  1483.  
  1484.       pi=acos(-1.0)
  1485.       ndiv=16
  1486.       dxmin=25.4/ndiv           ! minimum element size in radial direction
  1487.       dymin=1.                  ! minimum element size in thickness direction
  1488.       plength=40.*thickness
  1489.       ndy=nint(thickness/dymin)
  1490.       dy=thickness/ndy
  1491.       dxmax=20.*dxmin
  1492.       ndiv1=ndiv+4
  1493.  
  1494.       dist1=ndiv1*dxmin
  1495.       q=1.25
  1496.       ndiv2=int(log(dxmax/dxmin)/log(q))
  1497.       dist2=dxmin*q*(q**ndiv2-1.)/(q-1.)
  1498.  
  1499.       if (dist1+dist2 .gt. plength) then
  1500.          dist3=0.
  1501.          dist2=plength-dist1
  1502.          ndiv2=int(log(1.+dist2*(q-1.)/dxmin/q)/log(q))
  1503.       else
  1504.          dist3=plength-dist1-dist2
  1505.          ndiv3=1+int(dist3/dxmax)
  1506.       endif
  1507.  
  1508.       kp(1)=1+ndy
  1509.       kp(2)=(1+ndiv)*(1+ndy)
  1510.      
  1511.       do j=1,1+ndiv1+ndiv2+ndiv3
  1512.          if (j .le. 1+ndiv1) then
  1513.             xx=(j-1)*dxmin
  1514.          elseif (j .le. 1+ndiv1+ndiv2) then
  1515.             jj=j-1-ndiv1
  1516.             xx=ndiv1*dxmin+dxmin*q*(q**jj-1.)/(q-1.)
  1517.          else
  1518.             jj=j-1-ndiv1-ndiv2
  1519.             xx=dist1+dist2+jj*dist3/ndiv3
  1520.          endif
  1521.          do i=1,1+ndy
  1522.             nd=(j-1)*(1+ndy)+i
  1523.             inode(nd)=nd
  1524.             coord(1,nd)=xx
  1525.             coord(2,nd)=(i-1)*thickness/ndy
  1526. c            write(1,3) nd,coord(1,nd),coord(2,nd)
  1527.          enddo
  1528.       enddo
  1529.  3    format(i8,2(:', 'ES12.5))
  1530.  
  1531.       do j=1,ndiv1+ndiv2+ndiv3
  1532.          do i=1,ndy
  1533.             iel=(j-1)*ndy+i
  1534.             ielem(1,iel)=iel
  1535.             ielem(2,iel)=1
  1536.             if (i .eq. 1) then
  1537.                ielem(3,iel)=2
  1538.                ielem(4,iel)=1
  1539.             elseif (i .eq. ndy) then
  1540.                ielem(3,iel)=1
  1541.                ielem(4,iel)=3
  1542.             else
  1543.                ielem(3,iel)=0
  1544.                ielem(4,iel)=0
  1545.             endif
  1546.  
  1547.             inelem(1,iel)=(j-1)*(1+ndy)+i
  1548.             inelem(2,iel)=inelem(1,iel)+1+ndy
  1549.             inelem(3,iel)=inelem(2,iel)+1
  1550.             inelem(4,iel)=inelem(1,iel)+1
  1551.          enddo
  1552.       enddo
  1553.  5    format(1x,i4,4(:', 'i4))
  1554.  
  1555.       nnode=nd
  1556.       nelem=iel
  1557.  
  1558.       return
  1559.       end
  1560.       subroutine mesh01(d_pipe,t_pipe,t_sleeve,gap,weldarea,
  1561.      1     angle_w,vl_pipe,nnode,nelem,inode,
  1562.      2     coord,larray_ele,key_point,r_cc)
  1563.  
  1564.       implicit double precision (a-h,o-z)
  1565.  
  1566.       dimension :: key_point(*),larray_ele(8,*)
  1567.       dimension :: inode(*),coord(2,*)
  1568.       dimension :: x(1000),y(1000),n_repeat(10,2)
  1569.       dimension :: co_f(2),co_l(2),dist(4),larray2D(1000,5)
  1570.       common /coord/x,y
  1571.  
  1572.       meshtest = 0
  1573.    
  1574.       if(oldmesher.eq.0) meshtest=1
  1575.  
  1576.       bf_t_pipe=1.3
  1577.       bf_sleeve_top=1.3
  1578.       bf_pipe_left=1.5
  1579.       bf_pipe_right=1.5
  1580.       ne_pipe=9
  1581.       ne_pipe_left=19
  1582.       ne_pipe_right=19
  1583.       ne_sleeve_top=5
  1584.  
  1585.       pi=acos(-1.0d0)
  1586.       to_rad = pi/180.d0
  1587.       ang_set = 30.d0*to_rad
  1588.       angle_w = angle_w*to_rad
  1589.  
  1590.       weldxx=sqrt(2.0*weldarea)
  1591.       if (weldxx .gt. (gap+7.*t_sleeve/8.)) then
  1592.          weldxx=t_sleeve+gap
  1593.       endif
  1594.       weldyy=2.0*weldarea/weldxx
  1595.  
  1596.       r_cc=0.5*sqrt(weldxx*weldxx+weldyy*weldyy)
  1597.       write(*,3) 'Estimated cross-sectional area of weld deposit =', &     weldarea,'mm^2'
  1598.       write(*,3) 'Meshing in progress!'
  1599.  3    format(1x,A,F6.2,1x,A)
  1600.  
  1601.       key_point(1)=1
  1602.       key_point(2)=5
  1603.       key_point(3)=9
  1604.       key_point(4)=81
  1605.  
  1606.       x(1) = 0.d0
  1607.       y(1) = 0.d0
  1608.       x(9) = -weldyy
  1609.       y(9) = -weldxx
  1610.       x(81) = x(1)
  1611.       y(81) = y(9)
  1612.  
  1613.       x(5) = 0.5d0*(x(1)+x(9))
  1614.       y(5) = 0.5d0*(y(1)+y(9))
  1615.       x(41) = 0.5d0*(x(1)+x(81))
  1616.       y(41) = 0.5d0*(y(1)+y(81))
  1617.  
  1618.       if (ang_set .lt. angle_w) ang_set=angle_w
  1619.       x(45) = (dtan(ang_set)*x(41)+x(5)-y(41)+y(5)) &       /(dtan(ang_set)+1.d0)
  1620.       y(45) = y(5)-x(45)+x(5)
  1621.       x(49) = x(45)
  1622.       y(49) = y(9)
  1623.  
  1624.       nb = 1
  1625.       ne = 81
  1626.       nd = 10
  1627.       bf = 1.0
  1628.       co_f(1) = x(nb)
  1629.       co_f(2) = y(nb)
  1630.       co_l(1) = x(ne)
  1631.       co_l(2) = y(ne)
  1632.       call ng_line(nb,ne,nd,co_f,co_l,bf)
  1633.  
  1634.       do 20 i=1,4
  1635.          dist(i) = dabs(dabs(y(71-10*(i-1))-y(81))-gap)
  1636.  20   continue
  1637.       dist_mini = t_sleeve
  1638.       do 40 i=1,4
  1639.          if (dist(i) .lt. dist_mini) then
  1640.             dist_mini = dist(i)
  1641.             id_mini = i
  1642.          endif
  1643.  40   continue
  1644.       key_point(5) = 71-10*(id_mini-1)
  1645.       key_point(6) = 6
  1646.       key_point(7) = 7
  1647.       key_point(8) = 8
  1648.  
  1649.       if (gap .ge. 0.5d0*dabs(y(71)-y(81))) then
  1650.          y(71-10*(id_mini-1)) = -weldxx+gap
  1651.       else
  1652.          y(71) = -weldxx+0.5d0*dabs(y(71)-y(81))
  1653.       end if
  1654.       nb = 1
  1655.       ne = 9
  1656.       nd = 1
  1657.       bf = 1.0
  1658.       co_f(1) = x(nb)
  1659.       co_f(2) = y(nb)
  1660.       co_l(1) = x(ne)
  1661.       co_l(2) = y(ne)
  1662.       call ng_line(nb,ne,nd,co_f,co_l,bf)
  1663.       nb = 9
  1664.       ne = 49
  1665.       nd = 10
  1666.       bf = 1.0
  1667.       co_f(1) = x(nb)
  1668.       co_f(2) = y(nb)
  1669.       co_l(1) = x(ne)
  1670.       co_l(2) = y(ne)
  1671.       call ng_line(nb,ne,nd,co_f,co_l,bf)
  1672.       nb = 5
  1673.       ne = 45
  1674.       nd = 10
  1675.       bf = 1.0
  1676.       co_f(1) = x(nb)
  1677.       co_f(2) = y(nb)
  1678.       co_l(1) = x(ne)
  1679.       co_l(2) = y(ne)
  1680.       call ng_line(nb,ne,nd,co_f,co_l,bf)
  1681.  
  1682.       do 60 i=1,4
  1683.          nb = 11+(i-1)*10
  1684.          ne = 15+(i-1)*10
  1685.          nd = 1
  1686.          bf = 1.0
  1687.          co_f(1) = x(nb)
  1688.          co_f(2) = y(nb)
  1689.          co_l(1) = x(ne)
  1690.          co_l(2) = y(ne)
  1691.          call ng_line(nb,ne,nd,co_f,co_l,bf)
  1692.  60   continue
  1693.  
  1694.       do 80 i=1,4
  1695.          nb = 15+(i-1)*10
  1696.          ne = 19+(i-1)*10
  1697.          nd = 1
  1698.          bf = 1.0
  1699.          co_f(1) = x(nb)
  1700.          co_f(2) = y(nb)
  1701.          co_l(1) = x(ne)
  1702.          co_l(2) = y(ne)
  1703.          call ng_line(nb,ne,nd,co_f,co_l,bf)
  1704.  80   continue
  1705.  
  1706.       x(55) = x(46)
  1707.       y(55) = y(46)
  1708.       x(65) = x(47)
  1709.       y(65) = y(47)
  1710.       x(75) = x(48)
  1711.       y(75) = y(48)
  1712.       x(85) = x(49)
  1713.       y(85) = y(49)
  1714.  
  1715.       do 100 i=1,4
  1716.          nb = 51+(i-1)*10
  1717.          ne = 55+(i-1)*10
  1718.          nd = 1
  1719.          bf = 1.0
  1720.          co_f(1) = x(nb)
  1721.          co_f(2) = y(nb)
  1722.          co_l(1) = x(ne)
  1723.          co_l(2) = y(ne)
  1724.          call ng_line(nb,ne,nd,co_f,co_l,bf)
  1725.  100  continue
  1726.  
  1727.  
  1728.       do k=1,5
  1729.          nd_delta = 10*(k-1)
  1730.          nd_count_delta = 9*(k-1)
  1731.          do i=1+nd_delta,9+nd_delta
  1732.             nd_count = i-nd_delta+nd_count_delta
  1733.             inode(nd_count) = i
  1734.             coord(1,nd_count) = y(i)+0.5d0*d_pipe+weldxx
  1735.             coord(2,nd_count) = -x(i)+0.5d0*vl_pipe
  1736.          enddo
  1737.       enddo
  1738.       nnode = nd_count
  1739.       do k=1,4
  1740.          nd_delta = 10*(k-1)
  1741.          nd_count_delta = 4*(k-1)
  1742.          do i=51+nd_delta,54+nd_delta
  1743.             nd_count = nnode+i-50-nd_delta+nd_count_delta
  1744.             inode(nd_count) = i
  1745.             coord(1,nd_count) = y(i)+0.5d0*d_pipe+weldxx
  1746.             coord(2,nd_count) = -x(i)+0.5d0*vl_pipe
  1747.          enddo
  1748.       enddo
  1749.       nnode = nd_count
  1750.  
  1751.       do 120 k=1,4
  1752.          n_repeat(k,1) = 55+10*(k-1)
  1753.          n_repeat(k,2) = 46+(k-1)
  1754.  120  continue
  1755.  
  1756.       n_ele = 1
  1757.       nd1 = 1
  1758.       nd2 = nd1+1
  1759.       nd3 = nd2+10
  1760.       nd4 = nd1+10
  1761.       nele1row = 8
  1762.       nddt1row = 1
  1763.       nedt1row = 1
  1764.       nelerows = 4
  1765.       nddtrows = 10
  1766.       nedtrows = nele1row
  1767.       call elg4(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row,&     nedt1row,nelerows,nddtrows,nedtrows,larray2D)
  1768.       id_mat = 3
  1769.       do 140 j=1,32
  1770.          if (j .le. 8) then
  1771.             id_location = 1
  1772.             id_face = 1
  1773.          else
  1774.             id_location = 0
  1775.             id_face = 0
  1776.          end if
  1777.          do m=1,5
  1778.             larray_ele(m,j) = larray2D(j,m)
  1779.          enddo
  1780.          larray_ele(6,j) = id_mat
  1781.          larray_ele(7,j) = id_location
  1782.          larray_ele(8,j) = id_face
  1783.  140  continue
  1784.  
  1785.       n_ele = nele1row*nelerows+n_ele
  1786.       nd1 = 41
  1787.       nd2 = nd1+1
  1788.       nd3 = nd2+10
  1789.       nd4 = nd1+10
  1790.       nele1row = 4
  1791.       nddt1row = 1
  1792.       nedt1row = 1
  1793.       nelerows = 4
  1794.       nddtrows = 10
  1795.       nedtrows = nele1row
  1796.       call elg4(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row, &     nedt1row,nelerows,nddtrows,nedtrows,larray2D)
  1797.       do 160 j=1,16
  1798.       do 160 i=2,5
  1799.       do 160 k=1,4
  1800.          if (larray2D(j,i) .eq. n_repeat(k,1)) then
  1801.             larray2D(j,i)=n_repeat(k,2)
  1802.          endif
  1803. 160   continue
  1804.  
  1805.       do 180 j=1,16
  1806.          if (id_mini .eq. 1 .and. j .eq. 13) then
  1807.             id_location = 3
  1808.             id_face = 4
  1809.          elseif (id_mini .eq. 2 .and. (j .eq. 9 .or. j .eq. 13)) then
  1810.             id_location = 3
  1811.             id_face = 4
  1812.          elseif (id_mini .eq. 3 .and. &           (j .eq. 5 .or. j .eq. 9 .or. j .eq. 13)) then
  1813.             id_location = 3
  1814.             id_face = 4
  1815.          elseif ((j .eq. 1 .or. j .eq. 5 .or. j .eq. 9 .or. j .eq. 13)&           .and. (id_mini .eq. 4)) then
  1816.             id_location = 3
  1817.             id_face = 4
  1818.          else
  1819.             id_location = 0
  1820.             id_face = 0
  1821.          endif
  1822.          do i=1,5
  1823.             larray_ele(i,j+n_ele-1) = larray2D(j,i)
  1824.          enddo
  1825.          larray_ele(6,j+n_ele-1) = id_mat
  1826.          larray_ele(7,j+n_ele-1) = id_location
  1827.          larray_ele(8,j+n_ele-1) = id_face
  1828.  180  continue
  1829.  
  1830. 200   dr=1.d0
  1831.       do k=1,ne_pipe-1,1
  1832.          dr=dr+bf_t_pipe**k
  1833.       enddo
  1834.       w0=t_pipe/dr
  1835.       if (w0 .lt. abs(y(48)-y(49))) then
  1836.          ne_pipe = ne_pipe-1
  1837.          goto 200
  1838.       end if
  1839.  
  1840.       nd_grade = 10*ne_pipe
  1841.       key_point(9) = 101+nd_grade
  1842.       key_point(10) = 105+nd_grade
  1843.       key_point(11) = 109+nd_grade
  1844.  
  1845.       do i=1,5
  1846.          x(100+i) = x(9+(i-1)*10)
  1847.          y(100+i) = y(9+(i-1)*10)
  1848.       enddo
  1849.       do i=1,4
  1850.          x(105+i) = x(85-i)
  1851.          y(105+i) = y(85-i)
  1852.       enddo
  1853.  
  1854.       do i=1,9
  1855.          x(100+i+ne_pipe*10) = x(100+i)
  1856.          y(100+i+ne_pipe*10) = y(100+i)-t_pipe
  1857.       enddo
  1858.  
  1859.       do 220 i=1,9
  1860.          nb = 100+i
  1861.          ne = nb+ne_pipe*10
  1862.          nd = 10
  1863.          bf = bf_t_pipe
  1864.          co_f(1) = x(nb)
  1865.          co_f(2) = y(nb)
  1866.          co_l(1) = x(ne)
  1867.          co_l(2) = y(ne)
  1868.          call ng_line(nb,ne,nd,co_f,co_l,bf)
  1869.  220  continue
  1870.  
  1871.       do k=1,5
  1872.          n_repeat(k,1) = 101+(k-1)
  1873.          n_repeat(k,2) = 9+10*(k-1)
  1874.       enddo
  1875.       do k=6,9
  1876.          n_repeat(k,1) = 101+(k-1)
  1877.          n_repeat(k,2) = 84-(k-6)
  1878.       enddo
  1879.  
  1880.       do k=1,ne_pipe
  1881.          nd_delta = 10*(k-1)
  1882.          nd_count_delta = 9*(k-1)
  1883.          do i=111+nd_delta,119+nd_delta
  1884.             nd_count = nnode+i-110-nd_delta+nd_count_delta
  1885.             inode(nd_count) = i
  1886.             coord(1,nd_count) = y(i)+0.5d0*d_pipe+weldxx
  1887.             coord(2,nd_count) = -x(i)+0.5d0*vl_pipe
  1888.          enddo
  1889.       enddo
  1890.       nnode = nd_count
  1891.       n_ele = nele1row*nelerows+n_ele
  1892.       nd1 = 101
  1893.       nd2 = nd1+10
  1894.       nd3 = nd2+1
  1895.       nd4 = nd1+1
  1896.       nele1row = ne_pipe
  1897.       nddt1row = 10
  1898.       nedt1row = 1
  1899.       nelerows = 8
  1900.       nddtrows = 1
  1901.       nedtrows = nele1row
  1902.       call elg4(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row,&           nelerows,nddtrows,nedtrows,larray2D)
  1903.       do 240 j=1,nele1row*nelerows
  1904.       do 240 i=2,5
  1905.       do 240 k=1,9
  1906.          if (larray2D(j,i) .eq. n_repeat(k,1)) then
  1907.             larray2D(j,i)=n_repeat(k,2)
  1908.          endif
  1909.  240  continue
  1910. c
  1911.       id_mat = 1
  1912.       do 260 j=1,nele1row*nelerows
  1913.          if (mod(j,ne_pipe) .eq. 0) then
  1914.             id_location = 2
  1915.             id_face = 2
  1916.          else
  1917.             id_location = 0
  1918.             id_face = 0
  1919.          end if
  1920.          do i=1,5
  1921.             larray_ele(i,j+n_ele-1) = larray2D(j,i)
  1922.          enddo
  1923.          larray_ele(6,j+n_ele-1) = id_mat
  1924.          larray_ele(7,j+n_ele-1) = id_location
  1925.          larray_ele(8,j+n_ele-1) = id_face
  1926.  260  continue
  1927.  
  1928.  300  dr=1.d0
  1929.       do k=1,ne_pipe_left-1,1
  1930.          dr=dr+bf_pipe_left**k
  1931.       enddo
  1932.       w0=(0.5d0*vl_pipe-weldyy)/dr
  1933.       if (w0 .lt. abs(x(101)-x(102))) then
  1934.          ne_pipe_left = ne_pipe_left-1
  1935.          goto 300
  1936.       end if
  1937.  
  1938.       do i=1,ne_pipe+1
  1939.          x(200+1+20*(i-1)) = x(100+1+10*(i-1))
  1940.          y(200+1+20*(i-1)) = y(100+1+10*(i-1))
  1941.       enddo
  1942.  
  1943.       do i=1,ne_pipe+1
  1944.          x(200+1+ne_pipe_left+20*(i-1)) = -0.5d0*vl_pipe
  1945.          y(200+1+ne_pipe_left+20*(i-1)) = y(100+1+10*(i-1))
  1946.       enddo
  1947.  
  1948.       do 320 i=1,ne_pipe+1
  1949.          nb = 200+1+20*(i-1)
  1950.          ne = nb+ne_pipe_left
  1951.          nd = 1
  1952.          bf = bf_pipe_left
  1953.          co_f(1) = x(nb)
  1954.          co_f(2) = y(nb)
  1955.          co_l(1) = x(ne)
  1956.          co_l(2) = y(ne)
  1957.          call ng_line(nb,ne,nd,co_f,co_l,bf)
  1958.  320  continue
  1959.  
  1960.       n_repeat(1,1) = 201
  1961.       n_repeat(1,2) = 9
  1962.       do k=2,ne_pipe+1
  1963.          n_repeat(k,1) = 201+20*(k-1)
  1964.          n_repeat(k,2) = 101+10*(k-1)
  1965.       enddo
  1966.  
  1967.       do k=1,ne_pipe+1
  1968.          nd_delta = 20*(k-1)
  1969.          nd_count_delta = ne_pipe_left*(k-1)
  1970.          do i=202+nd_delta,202+(ne_pipe_left-1)+nd_delta
  1971.             nd_count = nnode+i-201-nd_delta+nd_count_delta
  1972.             inode(nd_count) = i
  1973.             coord(1,nd_count) = y(i)+0.5d0*D_pipe+weldxx
  1974.             coord(2,nd_count) = -x(i)+0.5d0*vl_pipe
  1975.          enddo
  1976.       enddo
  1977.       nnode = nd_count
  1978.  
  1979.       n_ele = nele1row*nelerows+n_ele
  1980.       nd1 = 201
  1981.       nd2 = nd1+1
  1982.       nd3 = nd2+20
  1983.       nd4 = nd1+20
  1984.       nele1row = ne_pipe_left
  1985.       nddt1row = 1
  1986.       nedt1row = 1
  1987.       nelerows = ne_pipe
  1988.       nddtrows = 20
  1989.       nedtrows = nele1row
  1990.       call elg4(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row,&           nelerows,nddtrows,nedtrows,larray2D)
  1991.       do 340 j=1,nele1row*nelerows
  1992.       do 340 i=2,5
  1993.       do 340 k=1,ne_pipe+1
  1994.          if (larray2D(j,i) .eq. n_repeat(k,1)) then
  1995.             larray2D(j,i)=n_repeat(k,2)
  1996.          endif
  1997.  340  continue
  1998.  
  1999.       id_mat = 1
  2000.       do 360 j=1,nele1row*nelerows
  2001.          if (j .le. ne_pipe_left) then
  2002.             id_location = 1
  2003.             id_face = 1
  2004.          else if (j .gt. ne_pipe_left*(ne_pipe-1)) then
  2005.             id_location = 2
  2006.             id_face = 3
  2007.          else
  2008.             id_location = 0
  2009.             id_face = 0
  2010.          end if
  2011.          do i=1,5
  2012.             larray_ele(i,j+n_ele-1) = larray2D(j,i)
  2013.          enddo
  2014.          larray_ele(6,j+n_ele-1) = id_mat
  2015.          larray_ele(7,j+n_ele-1) = id_location
  2016.          larray_ele(8,j+n_ele-1) = id_face
  2017.  360  continue
  2018.  
  2019.  400  dr=1.d0
  2020.       do k=1,ne_pipe_right-1,1
  2021.          dr=dr+bf_pipe_right**k
  2022.       enddo
  2023.       w0=(0.5d0*vl_pipe-weldyy*dtan(angle_w))/dr
  2024.       if (w0 .lt. abs(x(108)-x(109))) then
  2025.          ne_pipe_right = ne_pipe_right-1
  2026.          goto 400
  2027.       end if
  2028.  
  2029.       do i=1,ne_pipe+1
  2030.          x(400+1+20*(i-1)) = x(100+9+10*(i-1))
  2031.          y(400+1+20*(i-1)) = y(100+9+10*(i-1))
  2032.       enddo
  2033.  
  2034.       do i=1,ne_pipe+1
  2035.          x(400+1+ne_pipe_right+20*(i-1)) = 0.5d0*vl_pipe
  2036.          y(400+1+ne_pipe_right+20*(i-1)) = y(100+9+10*(i-1))
  2037.       enddo
  2038.  
  2039.       do 420 i=1,ne_pipe+1
  2040.          nb = 400+1+20*(i-1)
  2041.          ne = nb+ne_pipe_right
  2042.          nd = 1
  2043.          bf = bf_pipe_right
  2044.          co_f(1) = x(nb)
  2045.          co_f(2) = y(nb)
  2046.          co_l(1) = x(ne)
  2047.          co_l(2) = y(ne)
  2048.          call ng_line(nb,ne,nd,co_f,co_l,bf)
  2049.  420  continue
  2050.  
  2051.       n_repeat(1,1) = 401
  2052.       n_repeat(1,2) = 81
  2053.       do k=2,ne_pipe+1
  2054.          n_repeat(k,1) = 401+20*(k-1)
  2055.          n_repeat(k,2) = 109+10*(k-1)
  2056.       enddo
  2057.  
  2058.       do k=1,ne_pipe+1
  2059.          nd_delta = 20*(k-1)
  2060.          nd_count_delta = ne_pipe_right*(k-1)
  2061.          do i=402+nd_delta,402+(ne_pipe_right-1)+nd_delta
  2062.             nd_count = nnode+i-401-nd_delta+nd_count_delta
  2063.             inode(nd_count) = i
  2064.             coord(1,nd_count) = y(i)+0.5d0*D_pipe+weldxx
  2065.             coord(2,nd_count) = -x(i)+0.5d0*vl_pipe
  2066.          enddo
  2067.       enddo
  2068.       nnode = nd_count
  2069.  
  2070.       n_ele = nele1row*nelerows+n_ele
  2071.       nd2 = 401
  2072.       nd1 = nd2+1
  2073.       nd3 = nd2+20
  2074.       nd4 = nd1+20
  2075.       nele1row = ne_pipe_right
  2076.       nddt1row = 1
  2077.       nedt1row = 1
  2078.       nelerows = ne_pipe
  2079.       nddtrows = 20
  2080.       nedtrows = nele1row
  2081.       call elg4(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row, &           nelerows,nddtrows,nedtrows,larray2D)
  2082.       do 440 j=1,nele1row*nelerows
  2083.       do 440 i=2,5
  2084.       do 440 k=1,ne_pipe+1
  2085.          if (larray2D(j,i) .eq. n_repeat(k,1)) then
  2086.             larray2D(j,i)=n_repeat(k,2)
  2087.          endif
  2088.  440  continue
  2089.  
  2090.       id_mat = 1
  2091.       do 460 j=1,nele1row*nelerows
  2092.          if (j .le. ne_pipe_right) then
  2093.             id_location = 3
  2094.             id_face = 1
  2095.          else if (j .gt. ne_pipe_right*(ne_pipe-1)) then
  2096.             id_location = 2
  2097.             id_face = 3
  2098.          else
  2099.             id_location = 0
  2100.             id_face = 0
  2101.          end if
  2102.          do i=1,5
  2103.             larray_ele(i,j+n_ele-1) = larray2D(j,i)
  2104.          enddo
  2105.          larray_ele(6,j+n_ele-1) = id_mat
  2106.          larray_ele(7,j+n_ele-1) = id_location
  2107.          larray_ele(8,j+n_ele-1) = id_face
  2108.  460  continue
  2109.       do i=1,8-(id_mini-1)
  2110.          x(601+20*(i-1)) = x(71-10*(id_mini-1)-10*(i-1))
  2111.          y(601+20*(i-1)) = y(71-10*(id_mini-1)-10*(i-1))
  2112.       enddo
  2113.  
  2114.       do i=1,8-(id_mini-1)
  2115.          x(601+ne_pipe_right+20*(i-1)) = 0.5d0*vl_pipe
  2116.          y(601+ne_pipe_right+20*(i-1)) = y(71-10*(id_mini-1)-10*(i-1))
  2117.       enddo
  2118.  
  2119.       do 520 i=1,8-(id_mini-1)
  2120.          nb = 601+20*(i-1)
  2121.          ne = nb+ne_pipe_right
  2122.          nd = 1
  2123.          bf = bf_pipe_right
  2124.          co_f(1) = x(nb)
  2125.          co_f(2) = y(nb)
  2126.          co_l(1) = x(ne)
  2127.          co_l(2) = y(ne)
  2128.          call ng_line(nb,ne,nd,co_f,co_l,bf)
  2129.  520  continue
  2130.  
  2131.       do k=1,8-(id_mini-1)
  2132.          n_repeat(k,1) = 601+20*(k-1)
  2133.          n_repeat(k,2) = 71-10*(id_mini-1)-10*(k-1)
  2134.       enddo
  2135.  
  2136.       do k=1,9-id_mini
  2137.          nd_delta = 20*(k-1)
  2138.          nd_count_delta = ne_pipe_right*(k-1)
  2139.          do i=602+nd_delta,602+(ne_pipe_right-1)+nd_delta
  2140.             nd_count = nnode+i-601-nd_delta+nd_count_delta
  2141.             inode(nd_count) = i
  2142.             coord(1,nd_count) = y(i)+0.5d0*D_pipe+weldxx
  2143.             coord(2,nd_count) = -x(i)+0.5d0*vl_pipe
  2144.          enddo
  2145.       enddo
  2146.       nnode = nd_count
  2147.  
  2148.       n_ele = nele1row*nelerows+n_ele
  2149.       nd1 = 601
  2150.       nd2 = nd1+1
  2151.       nd3 = nd2+20
  2152.       nd4 = nd1+20
  2153.       nele1row = ne_pipe_right
  2154.       nddt1row = 1
  2155.       nedt1row = 1
  2156.       nelerows = 7-(id_mini-1)
  2157.       nddtrows = 20
  2158.       nedtrows = nele1row
  2159.       call elg4(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row,&           nelerows,nddtrows,nedtrows,larray2D)
  2160.       do 540 j=1,nele1row*nelerows
  2161.       do 540 i=2,5
  2162.       do 540 k=1,8-(id_mini-1)
  2163.          if (larray2D(j,i) .eq. n_repeat(k,1)) then
  2164.             larray2D(j,i)=n_repeat(k,2)
  2165.          endif
  2166.  540  continue
  2167.  
  2168.       id_mat = 2
  2169.       do 560 j=1,nele1row*nelerows
  2170.          if (j .le. ne_pipe_right) then
  2171.             id_location = 3
  2172.             id_face = 1
  2173.          else
  2174.             id_location = 0
  2175.             id_face = 0
  2176.          end if
  2177.          do i=1,5
  2178.             larray_ele(i,j+n_ele-1) = larray2D(j,i)
  2179.          enddo
  2180.          larray_ele(6,j+n_ele-1) = id_mat
  2181.          larray_ele(7,j+n_ele-1) = id_location
  2182.          larray_ele(8,j+n_ele-1) = id_face
  2183.  560  continue
  2184.  
  2185.  600  dr=1.d0
  2186.       do k=1,ne_sleeve_top-1,1
  2187.          dr=dr+bf_sleeve_top**k
  2188.       enddo
  2189.       w0=(t_sleeve+gap-weldxx)/dr
  2190.       if (w0 .lt. dabs(y(1)-y(11)) .and. ne_sleeve_top .gt. 1) then
  2191.          ne_sleeve_top = ne_sleeve_top-1
  2192.          goto 600
  2193.       end if
  2194.       if (ne_sleeve_top .lt. 1) ne_sleeve_top = 1
  2195.       do 620 i=1,ne_pipe_right+1
  2196.          id_old = 601+20*(7-(id_mini-1))+(i-1)
  2197.          id_new = id_old+20*ne_sleeve_top
  2198.          x(id_new) = x(id_old)
  2199.          y(id_new) = y(601)+t_sleeve
  2200.  620  continue
  2201.  
  2202.       do 640 i=1,ne_pipe_right+1
  2203.          nb = 600+1+20*(7-(id_mini-1))+(i-1)
  2204.          ne = nb+20*ne_sleeve_top
  2205.          nd = 20
  2206.          bf = bf_sleeve_top
  2207.          co_f(1) = x(nb)
  2208.          co_f(2) = y(nb)
  2209.          co_l(1) = x(ne)
  2210.          co_l(2) = y(ne)
  2211.          call ng_line(nb,ne,nd,co_f,co_l,bf)
  2212.  640  continue
  2213.  
  2214.       n_repeat(1,1) = 601+20*(7-(id_mini-1))
  2215.       n_repeat(1,2) = 1
  2216.  
  2217.       do k=1,ne_sleeve_top
  2218.          nd_delta = 20*(k-1)+20*(9-id_mini)
  2219.          nd_count_delta = (ne_pipe_right+1)*(k-1)
  2220.          do i=601+nd_delta,601+ne_pipe_right+nd_delta
  2221.             nd_count = nnode+i-600-nd_delta+nd_count_delta
  2222.             inode(nd_count) = i
  2223.             coord(1,nd_count) = y(i)+0.5d0*D_pipe+weldxx
  2224.             coord(2,nd_count) = -x(i)+0.5d0*vl_pipe
  2225.          enddo
  2226.       enddo
  2227.       nnode = nd_count
  2228.  
  2229.       n_ele = nele1row*nelerows+n_ele
  2230.       nd1 = 601+20*(7-(id_mini-1))
  2231.       nd2 = nd1+1
  2232.       nd3 = nd2+20
  2233.       nd4 = nd1+20
  2234.       nele1row = ne_pipe_right
  2235.       nddt1row = 1
  2236.       nedt1row = 1
  2237.       nelerows = ne_sleeve_top
  2238.       nddtrows = 20
  2239.       nedtrows = nele1row
  2240.       call elg4(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row,&           nelerows,nddtrows,nedtrows,larray2D)
  2241.       do 660 j=1,nele1row*nelerows
  2242.       do 660 i=2,5
  2243.          if (larray2D(j,i) .eq. n_repeat(1,1)) then
  2244.             larray2D(j,i)=n_repeat(1,2)
  2245.          endif
  2246.  660  continue
  2247.  
  2248.       id_mat = 2
  2249.       do 680 j=1,nele1row*nelerows
  2250.          if (mod(j,ne_pipe_right) .eq. 1) then
  2251.             id_location = 1
  2252.             id_face = 4
  2253.          else if (j .gt. (ne_sleeve_top-1)*ne_pipe_right) then
  2254.             id_location = 1
  2255.             id_face = 3
  2256.          else
  2257.             id_location = 0
  2258.             id_face = 0
  2259.          end if
  2260.          if ((mod(j,ne_pipe_right) .eq. 1) .and. &        (j .gt. (ne_sleeve_top-1)*ne_pipe_right)) then
  2261.             do i=1,5
  2262.                larray_ele(i,j+n_ele-1) = larray2D(j,i)
  2263.             enddo
  2264.  
  2265.             larray_ele(6,j+n_ele-1) = id_mat
  2266.             larray_ele(7,j+n_ele-1) = id_location
  2267.             larray_ele(8,j+n_ele-1) = id_face
  2268.          else
  2269.             do i=1,5
  2270.                larray_ele(i,j+n_ele-1) = larray2D(j,i)
  2271.             enddo
  2272.             larray_ele(6,j+n_ele-1) = id_mat
  2273.             larray_ele(7,j+n_ele-1) = id_location
  2274.             larray_ele(8,j+n_ele-1) = id_face
  2275.          end if
  2276.  680  continue
  2277.       nelem = n_ele-1+nele1row*nelerows
  2278.  
  2279.       if (meshtest .eq. 0) goto 999
  2280.  
  2281.       open(15,file='node.inp')
  2282.       open(16,file='elem.inp')
  2283.       do i=1,nnode
  2284.          write(15,4) inode(i),coord(1,i),coord(2,i)
  2285.       enddo
  2286.       do i=1,nelem
  2287.          write(16,8) (larray_ele(ii,i),ii=1,5)
  2288.       enddo
  2289.       close(15)
  2290.       close(16)
  2291.       stop
  2292.  4    format(i4,3(:', ',ES12.5))
  2293.  8    format(i4,4(:', ',i4))
  2294.  
  2295.  999  write(*,*) 'Meshing completed!'
  2296.  
  2297.       return
  2298.       end
  2299.  
  2300.  
  2301.       subroutine mesh02(d_branch,t_runpipe,t_branch,&  rootgap,vland,weldarea,electro_ang,&  vl_runpipe,vl_branch,size_w,nnode,nelem,inode, &     coord,larray_ele,key_point,r_cc)
  2302.  
  2303.       implicit real*8 (a-h,o-z)
  2304.  
  2305.       dimension :: key_point(*),larray_ele(8,*)
  2306.       dimension :: inode(*),coord(2,*)
  2307.       dimension :: x(1000),y(1000),n_repeat(10,2)
  2308.       dimension :: larray2D(1000,5),rfw(5)
  2309.  
  2310.       data (rfw(i),i=1,5)/0.27, 0.41, 0.6, 0.8, 1.0/
  2311.  
  2312.       common /coord/x,y
  2313.  
  2314.       if_weldsize_reset = 0
  2315.       meshtest = 0
  2316.       t_branch_cri=0.1d0
  2317.       bf_t_runpipe=1.5d0
  2318.       bf_runpipe_left=1.5d0
  2319.       bf_runpipe_right=1.5d0
  2320.       bf_branch_length=1.5d0
  2321.       bf_branch_thick=1.2d0
  2322.       ne_runpipe=9
  2323.       ne_runpipe_left=19
  2324.       ne_runpipe_right=19
  2325.       ne_branch_length=15
  2326.       ne_branch_thick=12
  2327.       zero=0.0d0
  2328.       pi=acos(-1.0d0)
  2329.       to_rad = pi/180.d0
  2330.       electro_ang = electro_ang*to_rad
  2331.       wprep_ang = 0.5 * electro_ang
  2332.  
  2333.       write(*,3) "Estimated cross-sectional area ", &     "of the weld deposit =", weldarea,"mm^2."
  2334.  3    format(1x,A,A,ES9.2,1x,A,A)
  2335.  
  2336.       angle1=electro_ang
  2337.       angle2=wprep_ang
  2338.       if (rootgap .lt. 0.5*vland) rootgap=0.5*vland
  2339.  
  2340.       vxmin=0.3*vland
  2341.       vymin=vxmin*tan(angle2)
  2342.       weldmin=rootgap*(vland+vxmin) &     +0.5d0*vxmin*vymin &     +0.5d0*(vymin+rootgap)**2/tan(angle1)
  2343.  
  2344.       if (weldarea .le. weldmin) then
  2345.          vx=zero
  2346.          vy=zero
  2347.          rootgap=sqrt(weldarea)
  2348.          vland=rootgap
  2349.          size_w=zero
  2350.          r_cc=0.5*rootgap
  2351.          key_point(1)=83
  2352.          key_point(2)=43
  2353.          key_point(3)=3
  2354.       else
  2355.          a=0.5*tan(angle2)*(1.+tan(angle2)/tan(angle1))
  2356.          b=rootgap*(1.+tan(angle2)/tan(angle1))
  2357.          c=rootgap*vland+0.5*rootgap*rootgap/tan(angle1)-weldarea
  2358.          vx=0.5*(-b+sqrt(b*b-4.*a*c))/a
  2359.  
  2360.          if (vland+vx .gt. t_branch-t_branch_cri) then
  2361.             vx=t_branch-vland
  2362.             vy=vx*tan(angle2)
  2363.             area3=weldarea-rootgap*vland-0.5*vx*(2.*rootgap+vy)
  2364.             weldsize=vx+2.*area3/(vy+rootgap)
  2365.             electro_ang=atan((vy+rootgap)/(weldsize-vx))  
  2366.          else
  2367.             vy=vx*tan(angle2)
  2368.             weldsize=vx+(vy+rootgap)/tan(angle1)
  2369.          endif
  2370.          size_w=(vy+rootgap)/sin(electro_ang)
  2371.          r_cc=0.5*size_w
  2372.          key_point(1)=89
  2373.          key_point(2)=49
  2374.          key_point(3)=9
  2375.       endif
  2376.  
  2377.       x0=0.5*d_branch-t_branch
  2378.       write(*,3) 'Meshing in progress!'
  2379.  
  2380.       id_mat = 3
  2381.       nd_count=0
  2382.       do 10 j=1,3
  2383.          do i=1,3
  2384.             n=i+(j-1)*40
  2385.             x(n)=0.5*(i-1)*vland
  2386.             y(n)=0.5*(j-1)*rootgap
  2387.             nd_count=nd_count+1
  2388.             inode(nd_count)=n
  2389.             coord(1,nd_count) = x(n)+x0
  2390.             coord(2,nd_count) = y(n)
  2391.          enddo
  2392.  10   continue
  2393.  
  2394.       nelem = 1
  2395.       nd1 = 1
  2396.       nd2 = nd1+1
  2397.       nd3 = nd2+40
  2398.       nd4 = nd1+40
  2399.       nele1row = 2
  2400.       nddt1row = 1
  2401.       nedt1row = 1
  2402.       nelerows = 2
  2403.       nddtrows = 40
  2404.       nedtrows = 2
  2405.       call elg4(nelem,nd1,nd2,nd3,nd4,nele1row,nddt1row,&     nedt1row,nelerows,nddtrows,nedtrows,larray2D)
  2406.       do 20 j=1,4
  2407.          if ((j .eq. 1) .or. (j .eq. 3)) then
  2408.             id_location = 1
  2409.             id_face = 4
  2410.          else
  2411.             id_location = 0
  2412.             id_face = 0
  2413.          endif
  2414.          do i=1,5
  2415.             larray_ele(i,j) = larray2D(j,i)
  2416.          enddo
  2417.          larray_ele(6,j) = id_mat
  2418.          larray_ele(7,j) = id_location
  2419.          larray_ele(8,j) = id_face
  2420.  20   continue
  2421.       nnode = nd_count
  2422.       nelem=5
  2423.  
  2424.       if (vx .lt. 1.0d-3) then
  2425.          vx=t_branch-vland
  2426.          vy=vx*tan(angle2)
  2427.          weldsize=t_branch-vland
  2428.       endif
  2429.  
  2430.       do i=1,5
  2431.          x(4+i) = vland+rfw(i)*weldsize
  2432.          y(4+i) = y(1)
  2433.          x(84+i) = vland+rfw(i)*vx
  2434.          y(84+i) = rootgap+rfw(i)*vy
  2435.       enddo
  2436.       do n=5,9
  2437.          nd_count = nd_count+1
  2438.          inode(nd_count) = n
  2439.          coord(1,nd_count) = x(n)+x0
  2440.          coord(2,nd_count) = y(n)
  2441.       enddo
  2442.       do n=85,89
  2443.          nd_count = nd_count+1
  2444.          inode(nd_count) = n
  2445.          coord(1,nd_count) = x(n)+x0
  2446.          coord(2,nd_count) = y(n)
  2447.       enddo
  2448.       nnode = nd_count
  2449.  
  2450.       if (weldarea .le. weldmin) goto 90
  2451.       do i=1,5
  2452.          x(4+i) = vland+rfw(i)*weldsize
  2453.          y(4+i) = y(1)
  2454.          x(84+i) = vland+rfw(i)*vx
  2455.          y(84+i) = rootgap+rfw(i)*vy
  2456.       enddo
  2457.  
  2458.       x(45) = 0.5*(x(5)+x(85))
  2459.       y(45) = 0.5*(y(5)+y(85))
  2460.       x(25) = 0.5*(x(5)+x(45))
  2461.       y(25) = 0.5*(y(5)+y(45))
  2462.       x(65) = 0.5*(x(85)+x(45))
  2463.       y(65) = 0.5*(y(85)+y(45))
  2464.  
  2465.       x(44) = 0.5*(x(43)+x(45))
  2466.       y(44) = 0.5*(y(43)+y(45))
  2467.       x(24) = 0.25*(x(3)+x(5)+x(43)+x(45))
  2468.       y(24) = 0.25*(y(3)+y(5)+y(43)+y(45))
  2469.       x(64) = 0.25*(x(83)+x(85)+x(43)+x(45))
  2470.       y(64) = 0.25*(y(83)+y(85)+y(43)+y(45))
  2471.  
  2472.       nnum=7
  2473.       ninc=10
  2474.       bias=1.0
  2475.       do i=0,2
  2476.          node1 = 7+i
  2477.          node2 = 87+i
  2478.          nstart=node1+ninc
  2479.          call nfill(node1,node2,nnum,nstart,ninc,bias)
  2480.       enddo
  2481.  
  2482.       do k=0,3
  2483.          x(16+k*20)=0.25*(x(5+k*20)+x(7+k*20)+x(25+k*20)+x(27+k*20))
  2484.          y(16+k*20)=0.25*(y(5+k*20)+y(7+k*20)+y(25+k*20)+y(27+k*20))
  2485.       enddo
  2486.       x(46) = 0.5*(x(45)+x(47))
  2487.       y(46) = 0.5*(y(45)+y(47))
  2488.       do j=1,3
  2489.          n=24+(j-1)*20
  2490.          nd_count = nd_count+1
  2491.          inode(nd_count) = n
  2492.          coord(1,nd_count) = x(n)+x0
  2493.          coord(2,nd_count) = y(n)
  2494.       enddo
  2495.  
  2496.       do j=1,5
  2497.          n = 5+(j-1)*20
  2498.          nd_count = nd_count+1
  2499.          inode(nd_count) = n
  2500.          coord(1,nd_count) = x(n)+x0
  2501.          coord(2,nd_count) = y(n)
  2502.       enddo
  2503.  
  2504.       do j=1,2
  2505.          n = 6+(j-1)*10
  2506.          nd_count = nd_count+1
  2507.          inode(nd_count) = n
  2508.          coord(1,nd_count) = x(n)+x0
  2509.          coord(2,nd_count) = y(n)
  2510.       enddo
  2511.  
  2512.       do j=1,3
  2513.          n = 36+(j-1)*10
  2514.          nd_count = nd_count+1
  2515.          inode(nd_count) = n
  2516.          coord(1,nd_count) = x(n)+x0
  2517.          coord(2,nd_count) = y(n)
  2518.       enddo
  2519.  
  2520.       do j=1,2
  2521.          n = 76+(j-1)*10
  2522.          nd_count = nd_count+1
  2523.          inode(nd_count) = n
  2524.          coord(1,nd_count) = x(n)+x0
  2525.          coord(2,nd_count) = y(n)
  2526.       enddo
  2527.  
  2528.       nnode=nd_count
  2529.       do k=1,9
  2530.          nd_delta = (k-1)*10
  2531.          nd_count_delta = 3*(k-1)
  2532.          do n=7+nd_delta,9+nd_delta
  2533.             nd_count = nnode+n-6-nd_delta+nd_count_delta
  2534.             inode(nd_count) = n
  2535.             coord(1,nd_count) = x(n)+x0
  2536.             coord(2,nd_count) = y(n)
  2537.          enddo
  2538.       enddo
  2539.       nnode = nd_count
  2540.  
  2541.       call elgen(5,3,5,25,24,larray2D)
  2542.       call elgen(6,3,24,44,43,larray2D)
  2543.       call elgen(7,24,25,45,44,larray2D)
  2544.       call elgen(8,43,44,64,83,larray2D)
  2545.       call elgen(9,44,45,65,64,larray2D)
  2546.       call elgen(10,83,64,65,85,larray2D)
  2547.       call elgen(11,5,6,16,25,larray2D)
  2548.       call elgen(12,6,7,17,16,larray2D)
  2549.       call elgen(13,25,16,17,27,larray2D)
  2550.       call elgen(14,25,27,37,36,larray2D)
  2551.       call elgen(15,25,36,46,45,larray2D)
  2552.       call elgen(16,36,37,47,46,larray2D)
  2553.       call elgen(17,45,46,56,65,larray2D)
  2554.       call elgen(18,46,47,57,56,larray2D)
  2555.       call elgen(19,65,56,57,67,larray2D)
  2556.       call elgen(20,65,67,77,76,larray2D)
  2557.       call elgen(21,65,76,86,85,larray2D)
  2558.       call elgen(22,76,77,87,86,larray2D)
  2559.  
  2560.       do 40 j=5,22
  2561.          do i=1,5
  2562.             larray_ele(i,j)=larray2D(j,i)
  2563.          enddo
  2564.          larray_ele(6,j) = id_mat
  2565.          larray_ele(7,j) = 0
  2566.          larray_ele(8,j) = 0
  2567.  40   continue
  2568.  
  2569.       nelem = 23
  2570.       nd1 = 7
  2571.       nd2 = nd1+1
  2572.       nd3 = nd2+10
  2573.       nd4 = nd1+10
  2574.       nele1row = 2
  2575.       nddt1row = 1
  2576.       nedt1row = 1
  2577.       nelerows = 8
  2578.       nddtrows = 10
  2579.       nedtrows = nele1row
  2580.       call elg4(nelem,nd1,nd2,nd3,nd4,nele1row,nddt1row,&     nedt1row,nelerows,nddtrows,nedtrows,larray2D)
  2581.       do 80 j=1,16
  2582.          if (mod(j,2) .eq. 0) then
  2583.             id_location = 1
  2584.             id_face = 2
  2585.          else
  2586.             id_location = 0
  2587.             id_face = 0
  2588.          end if
  2589.          do i=1,5
  2590.             larray_ele(i,j+nelem-1) = larray2D(j,i)
  2591.          enddo
  2592.          larray_ele(6,j+nelem-1) = id_mat
  2593.          larray_ele(7,j+nelem-1) = id_location
  2594.          larray_ele(8,j+nelem-1) = id_face
  2595.  80   continue
  2596.       nelem = nelem+nele1row*nelerows
  2597.  
  2598.  90   id_mat = 1
  2599.  100  dr=1.0
  2600.       do k=1,ne_runpipe-1,1
  2601.          dr=dr+bf_t_runpipe**k
  2602.       enddo
  2603.       w0=t_runpipe/dr
  2604.       dist_comp = bf_t_runpipe*min(0.5*vland,abs(x(5)-x(6)))
  2605.       if ((w0 .lt. dist_comp) .and. (ne_runpipe .gt. 1)) then
  2606.          ne_runpipe = ne_runpipe-1
  2607.          goto 100
  2608.       end if
  2609.  
  2610.       nd_grade = 10*ne_runpipe
  2611.       key_point(9) = 101+nd_grade
  2612.       key_point(10) = 105+nd_grade
  2613.       key_point(11) = 108+nd_grade
  2614.  
  2615.       do i=1,3
  2616.          x(100+i) = x(i)
  2617.          y(100+i) = y(i)
  2618.       enddo
  2619.       do i=1,5
  2620.          x(103+i) = x(4+i)
  2621.          y(103+i) = y(4+i)
  2622.       enddo
  2623.  
  2624.       do i=1,8
  2625.          x(100+i+nd_grade) = x(100+i)
  2626.          y(100+i+nd_grade) = y(100+i)-t_runpipe
  2627.       enddo
  2628.  
  2629.       nnum = ne_runpipe-1
  2630.       ninc = 10
  2631.       bias = bf_t_runpipe
  2632.       do i=1,8
  2633.          node1 = 100+i
  2634.          node2 = node1+nd_grade
  2635.          nstart = node1+ninc
  2636.          call nfill(node1,node2,nnum,nstart,ninc,bias)
  2637.       enddo
  2638.  
  2639.       do k=1,8
  2640.          n_repeat(k,1) = 100+k
  2641.          if (k .le. 3) then
  2642.             n_repeat(k,2) = k
  2643.          else
  2644.             n_repeat(k,2) = k+1
  2645.          endif
  2646.       enddo
  2647.  
  2648.       do k=1,ne_runpipe
  2649.          nd_delta = 10*(k-1)
  2650.          nd_count_delta = 8*(k-1)
  2651.          do n=111+nd_delta,118+nd_delta
  2652.             nd_count = nnode+n-110-nd_delta+nd_count_delta
  2653.             inode(nd_count) = n
  2654.             coord(1,nd_count) = x(n)+x0
  2655.             coord(2,nd_count) = y(n)
  2656.          enddo
  2657.       enddo
  2658.       nnode = nd_count
  2659.       nd1 = 101
  2660.       nd2 = nd1+10
  2661.       nd3 = nd2+1
  2662.       nd4 = nd1+1
  2663.       nele1row = ne_runpipe
  2664.       nddt1row = 10
  2665.       nedt1row = 1
  2666.       nelerows = 7
  2667.       nddtrows = 1
  2668.       nedtrows = nele1row
  2669.       call elg4(nelem,nd1,nd2,nd3,nd4,nele1row,nddt1row,&     nedt1row,nelerows,nddtrows,nedtrows,larray2D)
  2670.       do j=1,nele1row*nelerows
  2671.          do i=2,5
  2672.             do k=1,8
  2673.                if (larray2D(j,i) .eq. n_repeat(k,1))&              larray2D(j,i)=n_repeat(k,2)
  2674.             enddo
  2675.          enddo
  2676.       enddo
  2677.  
  2678.       do j=1,nele1row*nelerows
  2679.          if (mod(j,ne_runpipe) .eq. 0) then
  2680.             id_location = 2
  2681.             id_face = 2
  2682.          else
  2683.             id_location = 0
  2684.             id_face = 0
  2685.          endif
  2686.  
  2687.          do i=1,5
  2688.             larray_ele(i,j+nelem-1) = larray2D(j,i)
  2689.          enddo
  2690.          larray_ele(6,j+nelem-1) = id_mat
  2691.          larray_ele(7,j+nelem-1) = id_location
  2692.          larray_ele(8,j+nelem-1) = id_face
  2693.       enddo
  2694.       nelem=nelem+nele1row*nelerows
  2695.  
  2696.  200  dr=1.d0
  2697.       do k=1,ne_runpipe_left-1,1
  2698.          dr=dr+bf_runpipe_left**k
  2699.       enddo
  2700.       w0=(0.5*d_branch-t_branch)/dr
  2701.       w0c=(1.+0.5*(bf_runpipe_left-1.))*abs(x(2)-x(1))
  2702.       if ((w0 .lt. w0c) .and. (ne_runpipe_left .gt. 1)) then
  2703.          ne_runpipe_left = ne_runpipe_left-1
  2704.          goto 200
  2705.       end if
  2706.  
  2707.       do i=1,ne_runpipe+1
  2708.          x(201+20*(i-1)) = x(101+10*(i-1))
  2709.          y(201+20*(i-1)) = y(101+10*(i-1))
  2710.       enddo
  2711.  
  2712.       do i=1,ne_runpipe+1
  2713.          x(201+ne_runpipe_left+20*(i-1))=-0.5*d_branch+t_branch
  2714.          y(201+ne_runpipe_left+20*(i-1))=y(101+10*(i-1))
  2715.       enddo
  2716.  
  2717.       nnum = ne_runpipe_left-1
  2718.       ninc = 1
  2719.       bias = bf_runpipe_left
  2720.       do i=1,ne_runpipe+1
  2721.          node1 = 201+20*(i-1)
  2722.          node2 = node1+ne_runpipe_left
  2723.          nstart = node1+ninc
  2724.          call nfill(node1,node2,nnum,nstart,ninc,bias)
  2725.       enddo
  2726.  
  2727.       n_repeat(1,1) = 201
  2728.       n_repeat(1,2) = 1
  2729.       do k=2,ne_runpipe+1
  2730.          n_repeat(k,1) = 201+20*(k-1)
  2731.          n_repeat(k,2) = 101+10*(k-1)
  2732.       enddo
  2733.  
  2734.       do k=1,ne_runpipe+1
  2735.          nd_delta = 20*(k-1)
  2736.          nd_count_delta = ne_runpipe_left*(k-1)
  2737.          do n=202+nd_delta,202+(ne_runpipe_left-1)+nd_delta
  2738.             nd_count = nnode+n-201-nd_delta+nd_count_delta
  2739.             inode(nd_count) = n
  2740.             coord(1,nd_count) = x(n)+x0
  2741.             coord(2,nd_count) = y(n)
  2742.          enddo
  2743.       enddo
  2744.       nnode = nd_count
  2745.  
  2746.       nd1 = 201
  2747.       nd2 = nd1+1
  2748.       nd3 = nd2+20
  2749.       nd4 = nd1+20
  2750.       nele1row = ne_runpipe_left
  2751.       nddt1row = 1
  2752.       nedt1row = 1
  2753.       nelerows = ne_runpipe
  2754.       nddtrows = 20
  2755.       nedtrows = nele1row
  2756.       call elg4(nelem,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row,&     nelerows,nddtrows,nedtrows,larray2D)
  2757.       do j=1,nele1row*nelerows
  2758.          do i=2,5
  2759.             do k=1,ne_runpipe+1
  2760.                if (larray2D(j,i) .eq. n_repeat(k,1)) &              larray2D(j,i)=n_repeat(k,2)
  2761.             enddo
  2762.          enddo
  2763.       enddo
  2764.  
  2765.       do j=1,nele1row*nelerows
  2766.          if (j .le. ne_runpipe_left) then
  2767.             id_location = 1
  2768.             id_face = 1
  2769.          else if (j .gt. ne_runpipe_left*(ne_runpipe-1)) then
  2770.             id_location = 2
  2771.             id_face = 3
  2772.          else
  2773.             id_location = 0
  2774.             id_face = 0
  2775.          end if
  2776.  
  2777.          do i=1,5
  2778.             larray_ele(i,j+nelem-1) = larray2D(j,i)
  2779.          enddo
  2780.          larray_ele(6,j+nelem-1) = id_mat
  2781.          larray_ele(7,j+nelem-1) = id_location
  2782.          larray_ele(8,j+nelem-1) = id_face
  2783.       enddo
  2784.       nelem = nelem+nele1row*nelerows
  2785.  
  2786.  300  dr=1.d0
  2787.       do k=1,ne_runpipe_right-1,1
  2788.          dr=dr+bf_runpipe_right**k
  2789.       enddo
  2790.       w0=(vl_runpipe+t_branch-weldsize-vland)/dr
  2791.       w0c=(1.d0+0.5d0*(bf_runpipe_right-1.d0))*abs(x(8)-x(9))
  2792.       if ((w0 .lt. w0c) .and. (ne_runpipe_right .gt. 1)) then
  2793.          ne_runpipe_right = ne_runpipe_right-1
  2794.          goto 300
  2795.       end if
  2796.  
  2797.       do i=1,ne_runpipe+1
  2798.          x(401+20*(i-1)) = x(108+10*(i-1))
  2799.          y(401+20*(i-1)) = y(108+10*(i-1))
  2800.       enddo
  2801.  
  2802.       do i=1,ne_runpipe+1
  2803.          x(401+ne_runpipe_right+20*(i-1)) = vl_runpipe+t_branch
  2804.          y(401+ne_runpipe_right+20*(i-1)) = y(108+10*(i-1))
  2805.       enddo
  2806.  
  2807.       nnum = ne_runpipe_right-1
  2808.       ninc = 1
  2809.       bias = bf_runpipe_right
  2810.       do i=1,ne_runpipe+1
  2811.          node1 = 401+20*(i-1)
  2812.          node2 = node1+ne_runpipe_right
  2813.          nstart = node1+ninc
  2814.          call nfill(node1,node2,nnum,nstart,ninc,bias)
  2815.       enddo
  2816.  
  2817.       n_repeat(1,1) = 401
  2818.       n_repeat(1,2) = 9
  2819.       do k=2,ne_runpipe+1
  2820.          n_repeat(k,1) = 401+20*(k-1)
  2821.          n_repeat(k,2) = 108+10*(k-1)
  2822.       enddo
  2823.  
  2824.       do k=1,ne_runpipe+1
  2825.          nd_delta = 20*(k-1)
  2826.          nd_count_delta = ne_runpipe_right*(k-1)
  2827.          do n=402+nd_delta,402+(ne_runpipe_right-1)+nd_delta
  2828.             nd_count = nnode+n-401-nd_delta+nd_count_delta
  2829.             inode(nd_count) = n
  2830.             coord(1,nd_count) = x(n)+x0
  2831.             coord(2,nd_count) = y(n)
  2832.          enddo
  2833.       enddo
  2834.       nnode = nd_count
  2835.  
  2836.       nd2 = 401
  2837.       nd1 = nd2+1
  2838.       nd3 = nd2+20
  2839.       nd4 = nd1+20
  2840.       nele1row = ne_runpipe_right
  2841.       nddt1row = 1
  2842.       nedt1row = 1
  2843.       nelerows = ne_runpipe
  2844.       nddtrows = 20
  2845.       nedtrows = nele1row
  2846.       call elg4(nelem,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row, &     nelerows,nddtrows,nedtrows,larray2D)
  2847.       do j=1,nele1row*nelerows
  2848.          do i=2,5
  2849.             do k=1,ne_runpipe+1
  2850.                if (larray2D(j,i) .eq. n_repeat(k,1)) &              larray2D(j,i)=n_repeat(k,2)
  2851.             enddo
  2852.          enddo
  2853.       enddo
  2854.  
  2855.       do j=1,nele1row*nelerows
  2856.          if (j .le. ne_runpipe_right) then
  2857.             id_location = 1
  2858.             id_face = 1
  2859.          else if (j .gt. ne_runpipe_right*(ne_runpipe-1)) then
  2860.             id_location = 2
  2861.             id_face = 3
  2862.          else
  2863.             id_location = 0
  2864.             id_face = 0
  2865.          end if
  2866.  
  2867.          do i=1,5
  2868.             larray_ele(i,j+nelem-1) = larray2D(j,i)
  2869.          enddo
  2870.          larray_ele(6,j+nelem-1) = id_mat
  2871.          larray_ele(7,j+nelem-1) = id_location
  2872.          larray_ele(8,j+nelem-1) = id_face
  2873.       enddo
  2874.       nelem = nelem+nele1row*nelerows
  2875.  
  2876.       key_point(4) = 761
  2877.       key_point(5) = 781
  2878.       key_point(6) = 402
  2879.       key_point(7) = 403
  2880.       key_point(8) = 404
  2881.  
  2882.       do 320 i=1,3
  2883.          n_repeat(i,1) = 601+20*(i-1)
  2884.          n_repeat(i,2) = 81+(i-1)
  2885.          x(n_repeat(i,1)) = x(n_repeat(i,2))
  2886.          y(n_repeat(i,1)) = y(n_repeat(i,2))
  2887.  320  continue
  2888.  
  2889.       do 340 i=4,8
  2890.          n_repeat(i,1) = 601+20*(i-1)
  2891.          n_repeat(i,2) = 82+(i-1)
  2892.          x(n_repeat(i,1)) = x(n_repeat(i,2))
  2893.          y(n_repeat(i,1)) = y(n_repeat(i,2))
  2894.  340  continue
  2895.  
  2896.       fl_branch_local = 1.d0+vx/(t_branch-vland)
  2897.       vl_branch_local = rootgap+fl_branch_local* &     dtan(wprep_ang)*(t_branch-vland)
  2898.       do 360 i=1,8
  2899.          x(601+4+20*(i-1)) = x(601+20*(i-1))
  2900.          y(601+4+20*(i-1)) = vl_branch_local
  2901.  360  continue
  2902.  
  2903.       nnum=3
  2904.       ninc = 1
  2905.       bias = bf_branch_length
  2906.       do 380 i=1,8
  2907.          node1 = 601+20*(i-1)
  2908.          node2 = node1+4
  2909.          nstart = node1+1
  2910.          call nfill(node1,node2,nnum,nstart,ninc,bias)
  2911.  380  continue
  2912.  
  2913.  400  dr=1.d0
  2914.       do k=1,ne_branch_length-1,1
  2915.          dr=dr+bf_branch_length**k
  2916.       enddo
  2917.       w0=(vl_branch-vl_branch_local)/dr
  2918.       w0c=(1.d0+0.5d0*(bf_branch_length-1.d0))*dabs(y(605)-y(604))
  2919.       if ((w0 .lt. w0c) .and. (ne_branch_length .gt. 1)) then
  2920.          ne_branch_length = ne_branch_length-1
  2921.          goto 400
  2922.       end if
  2923.  
  2924.       do i=1,8
  2925.          ii=601+4+ne_branch_length+20*(i-1)
  2926.          x(ii) = x(605+20*(i-1))
  2927.          y(ii) = vl_branch
  2928.       enddo
  2929.  
  2930.       nnum = ne_branch_length-1
  2931.       ninc = 1
  2932.       bias = bf_branch_length
  2933.       do 420 i=1,8
  2934.          node1 = 605+20*(i-1)
  2935.          node2 = node1+ne_branch_length
  2936.          nstart = node1+1
  2937.          call nfill(node1,node2,nnum,nstart,ninc,bias)
  2938.  420  continue
  2939.  
  2940.       do 440 k=1,8
  2941.          nd_delta = 20*(k-1)
  2942.          nd_count_delta = (ne_branch_length+4)*(k-1)
  2943.          do i=602+nd_delta,602+(ne_branch_length+3)+nd_delta
  2944.             nd_count = nnode+i-601-nd_delta+nd_count_delta
  2945.             inode(nd_count) = i
  2946.             coord(1,nd_count) = x(i)+0.5d0*d_branch-t_branch
  2947.             coord(2,nd_count) = y(i)
  2948.          enddo
  2949.  440  continue
  2950.       nnode = nd_count
  2951.  
  2952.       nd1 = 601
  2953.       nd2 = nd1+20
  2954.       nd3 = nd2+1
  2955.       nd4 = nd1+1
  2956.       nele1row = 4
  2957.       nddt1row = 1
  2958.       nedt1row = 1
  2959.       nelerows = 7
  2960.       nddtrows = 20
  2961.       nedtrows = nele1row
  2962.       call elg4(nelem,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row, &     nelerows,nddtrows,nedtrows,larray2D)
  2963.       do j=1,nele1row*nelerows
  2964.          do i=2,5
  2965.             do k=1,8
  2966.                if (larray2D(j,i) .eq. n_repeat(k,1))&              larray2D(j,i)=n_repeat(k,2)
  2967.             enddo
  2968.          enddo
  2969.       enddo
  2970.  
  2971.       do 460 j=1,nele1row*nelerows
  2972.          if (j .le. 4) then
  2973.             id_location = 1
  2974.             id_face = 4
  2975.          else if (j .gt. 24 .and. if_weldsize_reset .eq. 1) then
  2976.             id_location = 1
  2977.             id_face = 2
  2978.          else
  2979.             id_location = 0
  2980.             id_face = 0
  2981.          end if
  2982.  
  2983.          do i=1,5
  2984.             larray_ele(i,j+nelem-1) = larray2D(j,i)
  2985.          enddo
  2986.          larray_ele(6,j+nelem-1) = id_mat
  2987.          larray_ele(7,j+nelem-1) = id_location
  2988.          larray_ele(8,j+nelem-1) = id_face
  2989.  460  continue
  2990.       nelem = nelem+nele1row*nelerows
  2991.  
  2992.       nd1 = 605
  2993.       nd2 = nd1+20
  2994.       nd3 = nd2+1
  2995.       nd4 = nd1+1
  2996.       nele1row = ne_branch_length
  2997.       nddt1row = 1
  2998.       nedt1row = 1
  2999.       nelerows = 7
  3000.       nddtrows = 20
  3001.       nedtrows = nele1row
  3002.       call elg4(nelem,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row, &     nelerows,nddtrows,nedtrows,larray2D)
  3003.  
  3004.       do j=1,nele1row*nelerows
  3005.          if (j .le. ne_branch_length) then
  3006.             id_location = 1
  3007.             id_face = 4
  3008.          else if (j .gt. ne_branch_length*6 .and.  &           if_weldsize_reset .eq. 1) then
  3009.             id_location = 1
  3010.             id_face = 2
  3011.          else
  3012.             id_location = 0
  3013.             id_face = 0
  3014.          end if
  3015.  
  3016.          do i=1,5
  3017.             larray_ele(i,j+nelem-1) = larray2D(j,i)
  3018.          enddo
  3019.          larray_ele(6,j+nelem-1) = id_mat
  3020.          larray_ele(7,j+nelem-1) = id_location
  3021.          larray_ele(8,j+nelem-1) = id_face
  3022.       enddo
  3023.       nnode=nd_count
  3024.       nelem = nele1row*nelerows+nelem
  3025.       nel0=nelem
  3026.       w0=(t_branch-vland-vx)
  3027.       if (w0 .lt. 1.0d-3) then
  3028.          nelem=nelem-1
  3029.          print *, 'Meshing completed!'
  3030.          return
  3031.       endif
  3032.  500  dr=1.d0
  3033.       do k=1,ne_branch_thick-1,1
  3034.          dr=dr+bf_branch_thick**k
  3035.       enddo
  3036.       w0=(t_branch-vland-vx)/dr
  3037.       w0c=(1.d0+0.5d0*(bf_branch_thick-1.d0))*dabs(x(741)-x(721))
  3038.       if ((w0 .lt. w0c) .and. (ne_branch_thick .gt. 1)) then
  3039.          ne_branch_thick = ne_branch_thick-1
  3040.          goto 500
  3041.       endif
  3042.  
  3043.       x(741+20*ne_branch_thick) = t_branch
  3044.       y(741+20*ne_branch_thick) = rootgap+ &     (t_branch-vland)*dtan(wprep_ang)
  3045.  
  3046.       n_repeat(1,1) = 741
  3047.       n_repeat(1,2) = 89
  3048.       node1 = 741
  3049.       node2 = node1+20*ne_branch_thick
  3050.       nnum=ne_branch_thick-1
  3051.       ninc = 20
  3052.       nstart = node1+ninc
  3053.       bias = bf_branch_thick
  3054.       call nfill(node1,node2,nnum,nstart,ninc,bias)
  3055.       x(745+20*ne_branch_thick) = t_branch
  3056.       y(745+20*ne_branch_thick) = y(745)
  3057.       node1 = 745
  3058.       node2 = node1+20*ne_branch_thick
  3059.       ninc=20
  3060.       nstart = node1+ninc
  3061.       call nfill(node1,node2,nnum,nstart,ninc,bias)
  3062.       x(745+20*ne_branch_thick+ne_branch_length) = t_branch
  3063.       y(745+20*ne_branch_thick+ne_branch_length) = vl_branch
  3064.  
  3065.       node1 = 745+ne_branch_length
  3066.       node2 = node1+20*ne_branch_thick
  3067.       nstart = node1+ninc
  3068.       call nfill(node1,node2,nnum,nstart,ninc,bias)
  3069.  
  3070.       bias = bf_branch_length
  3071.       do 520 i=1,ne_branch_thick
  3072.          node1 = 741+20*i
  3073.          node2 = 745+20*i
  3074.          ninc = 1
  3075.          nstart=node1+1
  3076.          bias = bf_branch_length
  3077.          nnum=3
  3078.          call nfill(node1,node2,nnum,nstart,ninc,bias)
  3079.  520  continue
  3080.  
  3081.       do 540 i=1,ne_branch_thick
  3082.          node1 = 745+20*i
  3083.          node2 = node1+ne_branch_length
  3084.          ninc = 1
  3085.          nstart=node1+1
  3086.          nnum=ne_branch_length-1
  3087.          bias = bf_branch_length
  3088.          call nfill(node1,node2,nnum,nstart,ninc,bias)
  3089.  540  continue
  3090.  
  3091.       do 560 k=1,ne_branch_thick
  3092.          nd_delta = 20*(k-1)
  3093.          nd_count_delta = (ne_branch_length+5)*(k-1)
  3094.          do i=761+nd_delta,761+(ne_branch_length+4)+nd_delta
  3095.             nd_count = nnode+i-760-nd_delta+nd_count_delta
  3096.             inode(nd_count) = i
  3097.             coord(1,nd_count) = x(i)+0.5d0*d_branch-t_branch
  3098.             coord(2,nd_count) = y(i)
  3099.          enddo
  3100.  560  continue
  3101.       nnode = nd_count
  3102.  
  3103.       nd1 = 741
  3104.       nd2 = nd1+20
  3105.       nd3 = nd2+1
  3106.       nd4 = nd1+1
  3107.       nele1row = 4+ne_branch_length
  3108.       nddt1row = 1
  3109.       nedt1row = 1
  3110.       nelerows = ne_branch_thick
  3111.       nddtrows = 20
  3112.       nedtrows = nele1row
  3113.       call elg4(nelem,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row, &     nelerows,nddtrows,nedtrows,larray2D)
  3114.  
  3115.       do j=1,nele1row*nelerows
  3116.          do i=2,5
  3117.             if (larray2D(j,i) .eq. n_repeat(1,1))&           larray2D(j,i)=n_repeat(1,2)
  3118.          enddo
  3119.       enddo
  3120.  
  3121.       do j=1,nele1row*nelerows
  3122.          if (mod(j,(ne_branch_length+4)) .eq. 1) then
  3123.             id_location = 1
  3124.             id_face = 1
  3125.          else if (j .gt. (ne_branch_length+4)*(ne_branch_thick-1)) then
  3126.             id_location = 1
  3127.             id_face = 2
  3128.          else
  3129.             id_location = 0
  3130.             id_face = 0
  3131.          end if
  3132.  
  3133.          if ((mod(j,(ne_branch_length+4)) .eq. 1) .and. &        (j .gt. (ne_branch_length+4)*(ne_branch_thick-1))) then
  3134.             do i=1,5
  3135.                larray_ele(i,j+nelem-1) = larray2D(j,i)
  3136.             enddo
  3137.             larray_ele(6,j+nelem-1) = id_mat
  3138.             larray_ele(7,j+nelem-1) = id_location
  3139.             larray_ele(8,j+nelem-1) = id_face
  3140.          else
  3141.             do i=1,5
  3142.                larray_ele(i,j+nelem-1) = larray2D(j,i)
  3143.             enddo
  3144.             larray_ele(6,j+nelem-1) = id_mat
  3145.             larray_ele(7,j+nelem-1) = id_location
  3146.             larray_ele(8,j+nelem-1) = id_face
  3147.          endif
  3148.       enddo
  3149.       nelem = nelem-1+nele1row*nelerows
  3150.  
  3151.       if (meshtest .eq. 0) goto 999
  3152.       open(15,file='node.inp')
  3153.       open(16,file='elem.inp')
  3154.       do i=1,nnode
  3155.          write(15,4) inode(i),coord(1,i),coord(2,i)
  3156.       enddo
  3157.       do i=1,nelem
  3158.          write(16,8) (larray_ele(ii,i),ii=1,5)
  3159.       enddo
  3160.       close(15)
  3161.       close(16)
  3162.       stop
  3163.  4    format(i4,3(:', ',ES12.5))
  3164.  8    format(i4,4(:', ',i4))
  3165.  
  3166.  999  write(*,*) 'Meshing completed!'
  3167.       return
  3168.       end
  3169.  
  3170.       subroutine mesh03(d_pipe,t_pipe,weldarea,vl_pipe,size_w, &     nnode,nelem,inode,coord,larray_ele,key_point,r_cc)
  3171.       implicit double precision (a-h,o-z)
  3172.  
  3173.       dimension :: key_point(*),larray_ele(8,*)
  3174.       dimension :: inode(*),coord(2,*)
  3175.       dimension :: node_symm(30),x(1000),y(1000),n_repeat(10,2)
  3176.       dimension :: co_f(2),co_l(2),larray2d(1000,5)
  3177.       common /coord/x,y
  3178.       pi=acos(-1.0)
  3179.       to_rad = pi/180.d0
  3180.       r_pipe=0.5*d_pipe
  3181.       bf_t_pipe=1.3
  3182.       bf_pipe_left=1.5
  3183.       ne_pipe=9
  3184.       ne_pipe_left=19
  3185.       ne_pipe_right=10
  3186.       ang_set=30.*to_rad
  3187.       ang_midnode=30.*to_rad
  3188.       f_node41=0.4
  3189.       f_node49=0.6
  3190.       whratio=3.2
  3191.       alpha=atan(0.5*whratio)
  3192.       ang_cir=pi-2.*alpha
  3193.       theta=2.*ang_cir
  3194.       ra_cir=sqrt(2.*weldarea/(theta-sin(theta)))
  3195.       weldwidth=2.*ra_cir*sin(ang_cir)
  3196.       weldheight=weldwidth/whratio
  3197.       weldwidth_h = 0.5*weldwidth
  3198.       ang_sector = 0.125*ang_cir
  3199.       write(*,3) 'Estimated cross-sectional area of weld deposit =', &     weldarea,'mm^2'
  3200.       write(*,3) 'Estimated weld bead width =',weldwidth,'mm'
  3201.       write(*,3) 'Estimated weld bead height =',weldheight,'mm'
  3202.       write(*,3) 'Meshing in progress!'
  3203.  3    format(1x,A,F6.2,1x,A)
  3204.  
  3205.       r_cc=sqrt(weldheight**2+weldwidth_h**2)
  3206.       size_w=ra_cir*theta
  3207.       key_point(1)=1
  3208.       key_point(2)=81
  3209.  
  3210.       x(1) = r_pipe+weldheight
  3211.       y(1) = 0.0d0
  3212.       x(9) = r_pipe
  3213.       y(9) = weldwidth_h
  3214.       x(81) = r_pipe
  3215.       y(81) = 0.0d0
  3216.       do 20 i=2,8,1
  3217.          x(i) = r_pipe + weldheight &        - ra_cir*(1.d0-dcos(ang_sector*dfloat(i-1)))
  3218.          y(i) = ra_cir*dsin(ang_sector*dfloat(i-1))
  3219.  20   continue
  3220.  
  3221.       x(41) = r_pipe + weldheight - f_node41*weldheight
  3222.       y(41) = 0.0d0
  3223.       x(49) = r_pipe
  3224.       y(49) = f_node49*weldwidth_h
  3225.       x(45) = 0.5d0*(x(49)+x(5))
  3226.       y(45) = y(49)-dabs(x(49)-x(45))*dtan(ang_midnode)
  3227.  
  3228.       nb = 45
  3229.       ne = 49
  3230.       nd = 1
  3231.       bf = 1.0
  3232.       co_f(1) = x(nb)
  3233.       co_f(2) = y(nb)
  3234.       co_l(1) = x(ne)
  3235.       co_l(2) = y(ne)
  3236.       call ngline(nb,ne,nd,co_f,co_l,bf)
  3237.  
  3238.       x(55) = x(46)
  3239.       y(55) = y(46)
  3240.       x(65) = x(47)
  3241.       y(65) = y(47)
  3242.       x(75) = x(48)
  3243.       y(75) = y(48)
  3244.       x(85) = x(49)
  3245.       y(85) = y(49)
  3246.       nb = 41
  3247.       ne = 45
  3248.       nd = 1
  3249.       bf = 1.0
  3250.       co_f(1) = x(nb)
  3251.       co_f(2) = y(nb)
  3252.       co_l(1) = x(ne)
  3253.       co_l(2) = y(ne)
  3254.       call ngline(nb,ne,nd,co_f,co_l,bf)
  3255.  
  3256.       do 40 i=1,5
  3257.          nb = 1+(i-1)
  3258.          ne = 41+(i-1)
  3259.          nd = 10
  3260.          bf = 1.1
  3261.          co_f(1) = x(nb)
  3262.          co_f(2) = y(nb)
  3263.          co_l(1) = x(ne)
  3264.          co_l(2) = y(ne)
  3265.          call ngline(nb,ne,nd,co_f,co_l,bf)
  3266.  40   continue
  3267.  
  3268.       nb = 81
  3269.       ne = 85
  3270.       nd = 1
  3271.       bf = 1.0
  3272.       co_f(1) = x(nb)
  3273.       co_f(2) = y(nb)
  3274.       co_l(1) = x(ne)
  3275.       co_l(2) = y(ne)
  3276.       call ngline(nb,ne,nd,co_f,co_l,bf)
  3277.  
  3278.       do 60 i=1,4
  3279.          nb = 41+(i-1)
  3280.          ne = 81+(i-1)
  3281.          nd = 10
  3282.          bf = 1.0
  3283.          co_f(1) = x(nb)
  3284.          co_f(2) = y(nb)
  3285.          co_l(1) = x(ne)
  3286.          co_l(2) = y(ne)
  3287.          call ngline(nb,ne,nd,co_f,co_l,bf)
  3288.  60   continue
  3289.  
  3290.       nb = 45
  3291.       ne = 49
  3292.       nd = 1
  3293.       bf = 1.0
  3294.       co_f(1) = x(nb)
  3295.       co_f(2) = y(nb)
  3296.       co_l(1) = x(ne)
  3297.       co_l(2) = y(ne)
  3298.       call ngline(nb,ne,nd,co_f,co_l,bf)
  3299.  
  3300.       do 80 i=1,4
  3301.          nb = 6+(i-1)
  3302.          ne = 46+(i-1)
  3303.          nd = 10
  3304.          bf = 1.1
  3305.          co_f(1) = x(nb)
  3306.          co_f(2) = y(nb)
  3307.          co_l(1) = x(ne)
  3308.          co_l(2) = y(ne)
  3309.          call ngline(nb,ne,nd,co_f,co_l,bf)
  3310.  80   continue
  3311.  
  3312.       do 100 i=1,9,1
  3313.          node_symm(i) = 1+10*(i-1)
  3314.  100  continue
  3315.  
  3316.       do 120 k=1,4
  3317.          n_repeat(k,1) = 55+10*(k-1)
  3318.          n_repeat(k,2) = 46+(k-1)
  3319.  120  continue
  3320.  
  3321.       n_ele = 1
  3322.       nd1 = 1
  3323.       nd2 = nd1+1
  3324.       nd3 = nd2+10
  3325.       nd4 = nd1+10
  3326.       nele1row = 8
  3327.       nddt1row = 1
  3328.       nedt1row = 1
  3329.       nelerows = 4
  3330.       nddtrows = 10
  3331.       nedtrows = nele1row
  3332.       call elg(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row,nedt1row,&     nelerows,nddtrows,nedtrows,larray2d)
  3333.       id_mat = 3
  3334.       do 140 j=1,32
  3335.          if (j .le. 8) then
  3336.             id_location = 1
  3337.             id_face = 1
  3338.          else
  3339.             id_location = 0
  3340.             id_face = 0
  3341.          end if
  3342.          do m=1,5
  3343.             larray_ele(m,j) = larray2d(j,m)
  3344.          enddo
  3345.          larray_ele(6,j) = id_mat
  3346.          larray_ele(7,j) = id_location
  3347.          larray_ele(8,j) = id_face
  3348.  140  continue
  3349.  
  3350.       n_ele = nele1row*nelerows+n_ele
  3351.       nd1 = 41
  3352.       nd2 = nd1+1
  3353.       nd3 = nd2+10
  3354.       nd4 = nd1+10
  3355.       nele1row = 4
  3356.       nddt1row = 1
  3357.       nedt1row = 1
  3358.       nelerows = 4
  3359.       nddtrows = 10
  3360.       nedtrows = nele1row
  3361.       call elg(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row, &     nedt1row,nelerows,nddtrows,nedtrows,larray2d)
  3362.       do 160 j=1,16
  3363.       do 160 i=2,5
  3364.       do 160 k=1,4
  3365.          if (larray2d(j,i) .eq. n_repeat(k,1))  &        larray2d(j,i)=n_repeat(k,2)
  3366.  160  continue
  3367.  
  3368.       id_location = 0
  3369.       id_face = 0
  3370.       do 180 j=1,16
  3371.          do i=1,5
  3372.             larray_ele(i,j+n_ele-1) = larray2d(j,i)
  3373.          enddo
  3374.          larray_ele(6,j+n_ele-1) = id_mat
  3375.          larray_ele(7,j+n_ele-1) = id_location
  3376.          larray_ele(8,j+n_ele-1) = id_face
  3377.  180  continue
  3378.  
  3379.  200  dr=1.d0
  3380.       do k=1,ne_pipe-1,1
  3381.          dr=dr+bf_t_pipe**k
  3382.       enddo
  3383.       w0=t_pipe/dr
  3384.       if (w0 .lt. abs(x(48)-x(49))) then
  3385.          ne_pipe = ne_pipe-1
  3386.          goto 200
  3387.       endif
  3388.  
  3389.       nd_grade = 10*ne_pipe
  3390.       key_point(3) = 101+nd_grade
  3391.       key_point(4) = 109+nd_grade
  3392.       do i=1,ne_pipe
  3393.          node_symm(i+9) = 109+10*i
  3394.       enddo
  3395.  
  3396.       do 220 i=1,5
  3397.          x(100+i) = x(9+(i-1)*10)
  3398.          y(100+i) = y(9+(i-1)*10)
  3399.  220  continue
  3400.  
  3401.       do 240 i=1,4
  3402.          x(105+i) = x(85-i)
  3403.          y(105+i) = y(85-i)
  3404.  240  continue
  3405.  
  3406.       do 260 i=1,9
  3407.          x(100+i+ne_pipe*10) = x(100+i)-t_pipe
  3408.          y(100+i+ne_pipe*10) = y(100+i)
  3409.  260  continue
  3410.  
  3411.       do 280 i=1,9
  3412.          nb = 100+i
  3413.          ne = nb+ne_pipe*10
  3414.          nd = 10
  3415.          bf = bf_t_pipe
  3416.          co_f(1) = x(nb)
  3417.          co_f(2) = y(nb)
  3418.          co_l(1) = x(ne)
  3419.          co_l(2) = y(ne)
  3420.          call ngline(nb,ne,nd,co_f,co_l,bf)
  3421.  280  continue
  3422.  
  3423.       do k=1,5
  3424.          n_repeat(k,1) = 101+(k-1)
  3425.          n_repeat(k,2) = 9+10*(k-1)
  3426.       enddo
  3427.       do k=6,9
  3428.          n_repeat(k,1) = 101+(k-1)
  3429.          n_repeat(k,2) = 84-(k-6)
  3430.       enddo
  3431.  
  3432.       n_ele = nele1row*nelerows+n_ele
  3433.       nd1 = 101
  3434.       nd2 = nd1+10
  3435.       nd3 = nd2+1
  3436.       nd4 = nd1+1
  3437.       nele1row = ne_pipe
  3438.       nddt1row = 10
  3439.       nedt1row = 1
  3440.       nelerows = 8
  3441.       nddtrows = 1
  3442.       nedtrows = nele1row
  3443.       call elg(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row,
  3444.      1     nedt1row,nelerows,nddtrows,nedtrows,larray2d)          
  3445.       do 300 j=1,nele1row*nelerows
  3446.       do 300 i=2,5
  3447.       do 300 k=1,9
  3448.       if (larray2d(j,i) .eq. n_repeat(k,1)) &        larray2d(j,i)=n_repeat(k,2)
  3449.  300  continue
  3450.  
  3451.       id_mat = 1
  3452.       do 320 j=1,nele1row*nelerows
  3453.          if (mod(j,ne_pipe) .eq. 0) then
  3454.             id_location = 2
  3455.             id_face = 2
  3456.          else
  3457.             id_location = 0
  3458.             id_face = 0
  3459.          end if
  3460.          do i=1,5
  3461.             larray_ele(i,j+n_ele-1) = larray2d(j,i)
  3462.          enddo
  3463.          larray_ele(6,j+n_ele-1) = id_mat
  3464.          larray_ele(7,j+n_ele-1) = id_location
  3465.          larray_ele(8,j+n_ele-1) = id_face
  3466.  320  continue
  3467.  
  3468.  340  dr=1.d0
  3469.       do k=1,ne_pipe_left-1,1
  3470.          dr=dr+bf_pipe_left**k        
  3471.       enddo
  3472.       w0=(0.5d0*vl_pipe-weldwidth_h)/dr
  3473.       if (w0 .lt. abs(y(101)-y(102))) then
  3474.          ne_pipe_left = ne_pipe_left-1
  3475.          goto 340
  3476.       endif
  3477.  
  3478.       do i=1,ne_pipe+1
  3479.          x(201+20*(i-1)) = x(101+10*(i-1))
  3480.          y(201+20*(i-1)) = y(101+10*(i-1))
  3481.       enddo
  3482.  
  3483.       do i=1,ne_pipe+1
  3484.          x(201+ne_pipe_left+20*(i-1)) = x(101+10*(i-1))
  3485.          y(201+ne_pipe_left+20*(i-1)) = 0.5d0*vl_pipe
  3486.       enddo
  3487.  
  3488.       do 360 i=1,ne_pipe+1
  3489.          nb = 201+20*(i-1)
  3490.          ne = nb+ne_pipe_left
  3491.          nd = 1
  3492.          bf = bf_pipe_left
  3493.          co_f(1) = x(nb)
  3494.          co_f(2) = y(nb)
  3495.          co_l(1) = x(ne)
  3496.          co_l(2) = y(ne)
  3497.          call ngline(nb,ne,nd,co_f,co_l,bf)
  3498.  360  continue
  3499.  
  3500.       n_repeat(1,1) = 201
  3501.       n_repeat(1,2) = 9
  3502.       do k=2,ne_pipe+1
  3503.          n_repeat(k,1) = 201+20*(k-1)
  3504.          n_repeat(k,2) = 101+10*(k-1)
  3505.       enddo
  3506.  
  3507.       n_ele = nele1row*nelerows+n_ele
  3508.       nd1 = 201
  3509.       nd2 = nd1+1
  3510.       nd3 = nd2+20
  3511.       nd4 = nd1+20
  3512.       nele1row = ne_pipe_left
  3513.       nddt1row = 1
  3514.       nedt1row = 1
  3515.       nelerows = ne_pipe
  3516.       nddtrows = 20
  3517.       nedtrows = nele1row
  3518.       call elg(n_ele,nd1,nd2,nd3,nd4,nele1row,nddt1row,&     nedt1row,nelerows,nddtrows,nedtrows ,larray2d)      
  3519.       do 380 j=1,nele1row*nelerows
  3520.       do 380 i=2,5
  3521.       do 380 k=1,ne_pipe+1
  3522.       if (larray2d(j,i) .eq. n_repeat(k,1)) &        larray2d(j,i)=n_repeat(k,2)
  3523.  380  continue
  3524.  
  3525.       id_mat = 1
  3526.       do 400 j=1,nele1row*nelerows
  3527.          if (j .le. ne_pipe_left) then
  3528.             id_location = 1
  3529.             id_face = 1
  3530.          elseif (j .gt. ne_pipe_left*(ne_pipe-1)) then
  3531.             id_location = 2
  3532.             id_face = 3
  3533.          else
  3534.             id_location = 0
  3535.             id_face = 0
  3536.          end if
  3537.          do i=1,5
  3538.             larray_ele(i,j+n_ele-1) = larray2d(j,i)
  3539.          enddo
  3540.          larray_ele(6,j+n_ele-1) = id_mat
  3541.          larray_ele(7,j+n_ele-1) = id_location
  3542.          larray_ele(8,j+n_ele-1) = id_face
  3543.  400  continue
  3544.  
  3545.       nelem = n_ele-1+nele1row*nelerows
  3546.  
  3547.       do k=1,5
  3548.          nd_delta = 10*(k-1)
  3549.          nd_count_delta = 9*(k-1)
  3550.          do i=1+nd_delta,9+nd_delta
  3551.             nd_count = i-nd_delta+nd_count_delta
  3552.             inode(nd_count) = i
  3553.             coord(1,nd_count) = x(i)
  3554.             coord(2,nd_count) = y(i)
  3555.          enddo
  3556.       enddo
  3557.       nnode = nd_count
  3558.  
  3559.       do k=1,4
  3560.          nd_delta = 10*(k-1)
  3561.          nd_count_delta = 4*(k-1)
  3562.          do i=51+nd_delta,54+nd_delta
  3563.             nd_count = nnode+i-50-nd_delta+nd_count_delta
  3564.             inode(nd_count) = i
  3565.             coord(1,nd_count) = x(i)
  3566.             coord(2,nd_count) = y(i)
  3567.          enddo
  3568.       enddo
  3569.       nnode = nd_count
  3570.  
  3571.       do k=1,ne_pipe
  3572.          nd_delta = 10*(k-1)
  3573.          nd_count_delta = 9*(k-1)
  3574.          do i=111+nd_delta,119+nd_delta
  3575.             nd_count = nnode+i-110-nd_delta+nd_count_delta
  3576.             inode(nd_count) = i
  3577.             coord(1,nd_count) = x(i)
  3578.             coord(2,nd_count) = y(i)
  3579.          enddo
  3580.       enddo
  3581.       nnode = nd_count
  3582.  
  3583.       do k=1,ne_pipe+1
  3584.          nd_delta = 20*(k-1)
  3585.          nd_count_delta = ne_pipe_left*(k-1)
  3586.          do i=202+nd_delta,202+(ne_pipe_left-1)+nd_delta
  3587.             nd_count = nnode+i-201-nd_delta+nd_count_delta
  3588.             inode(nd_count) = i
  3589.             coord(1,nd_count) =  x(i)
  3590.             coord(2,nd_count) =  y(i)
  3591.          enddo
  3592.       enddo
  3593.       nnode = nd_count
  3594.  
  3595.       write(*,3) "Meshing completed!"
  3596.       return
  3597.       end
  3598.  
  3599.       subroutine ngline(node_f,node_l,node_d,cord_f,cord_l,b_factor)
  3600.       implicit real*8 (a-h,o-z)
  3601.       parameter (one=1.0d0, none=1, ntwo=2)
  3602.       dimension cord_f(2),cord_l(2),x(1000),y(1000)
  3603.  
  3604.       common /coord/x,y
  3605.  
  3606.       nnode = (node_l-node_f)/node_d
  3607.       dr=one
  3608.       do 110 k=none,nnode-none,none
  3609. 110   dr=dr+b_factor**k
  3610.       x0 = (cord_l(1)-cord_f(1))/dr
  3611.       y0 = (cord_l(2)-cord_f(2))/dr
  3612.  
  3613.       x(node_f+node_d) = cord_f(1)+x0
  3614.       y(node_f+node_d) = cord_f(2)+y0
  3615.       do 210 k=ntwo,nnode-none,none
  3616.       nd = node_f+node_d*k
  3617.       x(nd) = x(nd-node_d)+x0*b_factor**(k-none)
  3618.       y(nd) = y(nd-node_d)+y0*b_factor**(k-none)
  3619. 210   enddo
  3620.  
  3621.    
  3622.       return
  3623.       end
  3624.  
  3625.       subroutine elg(n0,n1,n2,n3,n4, &     ne1rw,nd1rw,ned1rw,nrow,ndrw,nedrw,iarray)
  3626.       implicit real*8 (a-h,o-z)
  3627.       dimension iarray (1000,5)
  3628.  
  3629.       iarray(1,1) = n0
  3630.       iarray(1,2) = n1
  3631.       iarray(1,3) = n2
  3632.       iarray(1,4) = n3
  3633.       iarray(1,5) = n4
  3634.       do 200 i=2,ne1rw
  3635.       iarray(i,1) = iarray((i-1),1)+ned1rw
  3636.       do 200 l=2,5
  3637. 200   iarray(i,l) = iarray((i-1),l)+nd1rw
  3638.  
  3639.       do 400 j=2,nrow
  3640.       do 400 i=1,ne1rw
  3641.       iarray(ne1rw*(j-1)+i,1) = iarray(ne1rw*(j-2)+i,1)+nedrw
  3642.       do 400 l=2,5,1
  3643. 400   iarray(ne1rw*(j-1)+i,l) = iarray(ne1rw*(j-2)+i,l)+ndrw
  3644.  
  3645.       return
  3646.       end
  3647.  
  3648.       subroutine nfill (node1,node2,nnum,nstart,ninc,bias)
  3649.       implicit real*8 (a-h,o-z)
  3650.       parameter (ntest=0)
  3651.       dimension x(1000),y(1000)
  3652.  
  3653.       common /coord/x,y
  3654.  
  3655.       sum=1.0
  3656.       do k=1,nnum,1
  3657.          sum=sum+bias**k
  3658.       enddo
  3659.       dx = (x(node2)-x(node1))/sum
  3660.       dy = (y(node2)-y(node1))/sum
  3661.  
  3662.       x(nstart) = x(node1) + dx
  3663.       y(nstart) = y(node1) + dy
  3664.       if (node1 .eq. ntest) then
  3665.          print *, node1, x(node1),y(node1)
  3666.          print *, nstart, x(nstart),y(nstart)
  3667.       endif
  3668.       do k=2,nnum,1
  3669.          nd = nstart+ninc*(k-1)
  3670.          x(nd) = x(nd-ninc)+dx*bias**(k-1)
  3671.          y(nd) = y(nd-ninc)+dy*bias**(k-1)
  3672.          if (node1 .eq. ntest) print *, nd, x(nd), y(nd)
  3673.       enddo
  3674.       if (node1 .eq. ntest) print *, node2, x(node2),y(node2)
  3675.  
  3676.       return
  3677.       end
  3678.  
  3679.       subroutine elgen(nel,nd1,nd2,nd3,nd4,iarray)
  3680.       implicit real*8 (a-h,o-z)
  3681.       dimension iarray (1000,5)
  3682.  
  3683.       iarray(nel,1) = nel
  3684.       iarray(nel,2) = nd1
  3685.       iarray(nel,3) = nd2
  3686.       iarray(nel,4) = nd3
  3687.       iarray(nel,5) = nd4
  3688.  
  3689.       return
  3690.       end
  3691.  
  3692.       function tff(temp,id)
  3693.       implicit real*8 (a-h,o-z)
  3694.       include 'common.f'
  3695.  
  3696.       if (temp .lt. ts(id)) then
  3697.          tff=0.0d0
  3698.       elseif (temp .lt. tl(id)) then
  3699.          tff=(temp-ts(id))/(tl(id)-ts(id))
  3700.       else
  3701.          tff=1.0d0
  3702.       endif
  3703.  
  3704.       end
  3705.  
  3706.       function tk(temp,id)
  3707.       implicit real*8 (a-h,o-z)
  3708.  
  3709.       if (id .eq. 1)  then
  3710.          tk = tk_steel1(temp)
  3711.       elseif (id .eq. 2) then
  3712.          tk = tk_steel2(temp)
  3713.       elseif (id .eq. 3) then
  3714.      tk = tk_steel3(temp)
  3715.       endif
  3716.  
  3717.       end
  3718.       function tk_steel1(temp)
  3719.       implicit real *8 (a-h,o-z)
  3720.       dimension t(33),value(33)
  3721.  
  3722.       data (value(i),t(i),i=1,33) /
  3723.      &     5.119d-2,   0.0d0,
  3724.      &     5.146d-2,  50.0d0,
  3725.      &     5.104d-2, 100.0d0,
  3726.      &     4.979d-2, 150.0d0,
  3727.      &     4.853d-2, 200.0d0,
  3728.      &     4.977d-2, 250.0d0,
  3729.      &     4.435d-2, 300.0d0,
  3730.      &     4.348d-2, 350.0d0,
  3731.      &     4.268d-2, 400.0d0,
  3732.      &     4.100d-2, 450.0d0,
  3733.      &     3.933d-2, 500.0d0,
  3734.      &     3.766d-2, 550.0d0,
  3735.      &     3.556d-2, 600.0d0,
  3736.      &     3.389d-2, 650.0d0,
  3737.      &     3.180d-2, 700.0d0,
  3738.      &     2.866d-2, 750.0d0,
  3739.      &     2.552d-2, 800.0d0,
  3740.      &     2.552d-2, 850.0d0,
  3741.      &     2.636d-2, 900.0d0,
  3742.      &     2.678d-2, 950.0d0,
  3743.      &     2.720d-2,1000.0d0,
  3744.      &     2.803d-2,1050.0d0,
  3745.      &     2.845d-2,1100.0d0,
  3746.      &     2.929d-2,1150.0d0,
  3747.      &     2.971d-2,1200.0d0,
  3748.      &     3.051d-2,1250.0d0,
  3749.      &     3.111d-2,1300.0d0,
  3750.      &     3.171d-2,1350.0d0,
  3751.      &     3.231d-2,1400.0d0,
  3752.      &     3.291d-2,1450.0d0,
  3753.      &     3.500d-2,1500.0d0,
  3754.      &     6.500d-2,1550.0d0,
  3755.      &     1.250d-1,1600.0d0/
  3756.                
  3757.       t_c=temp-273.15d0
  3758.       if (t_c .le. t(1)) then
  3759.          tk_steel1=value(1)
  3760.       elseif (t_c .ge. t(33)) then
  3761.          tk_steel1=value(33)
  3762.       else
  3763.          i=int(t_c/5.0d1)+1
  3764.          tk_steel1=value(i)+(value(i+1)-value(i))&        *(t_c-t(i))/(t(i+1)-t(i))
  3765.       endif
  3766.  
  3767.       return
  3768.       end
  3769.  
  3770.       function tk_steel2(temp)
  3771.       implicit real *8 (a-h,o-z)
  3772.  
  3773.       integer, parameter :: np= 33
  3774.  
  3775.       double precision, dimension (np) :: t,value
  3776.  
  3777.       data (value(k),t(k),k=1,np) /
  3778.      1      1.590E-02,     0.,
  3779.      2      1.590E-02,    50.,
  3780.      3      1.631E-02,   100.,
  3781.      4      1.673E-02,   150.,
  3782.      5      1.715E-02,   200.,
  3783.      6      1.757E-02,   250.,
  3784.      7      1.841E-02,   300.,
  3785.      8      1.924E-02,   350.,
  3786.      9      2.008E-02,   400.,
  3787.      &      2.092E-02,   450.,
  3788.      1      2.175E-02,   500.,
  3789.      2      2.301E-02,   550.,
  3790.      3      2.384E-02,   600.,
  3791.      4      2.468E-02,   650.,
  3792.      5      2.552E-02,   700.,
  3793.      6      2.635E-02,   750.,
  3794.      7      2.677E-02,   800.,
  3795.      8      2.635E-02,   850.,
  3796.      9      2.677E-02,   900.,
  3797.      &      2.761E-02,   950.,
  3798.      1      2.803E-02,  1000.,
  3799.      2      2.844E-02,  1050.,
  3800.      3      2.886E-02,  1100.,
  3801.      4      2.928E-02,  1150.,
  3802.      5      2.970E-02,  1200.,
  3803.      6      3.051E-02,  1250.,
  3804.      7      3.111E-02,  1300.,
  3805.      8      3.171E-02,  1350.,
  3806.      9      3.231E-02,  1400.,
  3807.      &      3.291E-02,  1450.,
  3808.      1      3.500E-02,  1500.,
  3809.      2      6.500E-02,  1550.,
  3810.      3      1.250E-01,  1600./
  3811.  
  3812.       t_c = temp-273.15d0
  3813.            
  3814.       if (t_c .le. t(1))  then
  3815.  
  3816.          tk_steel2 = value(1)
  3817.  
  3818.       elseif (t_c .ge. t(np)) then
  3819.  
  3820.          tk_steel2 = value(6)
  3821.  
  3822.       else
  3823.  
  3824.          do i=1,np-1
  3825.             if ((t_c .gt. t(i)) .and. (t_c .le. t(i+1))) exit
  3826.          enddo
  3827.          tk_steel2 = value(i) + (value(i+1)-value(i)) &        *(t_c-t(i))/(t(i+1)-t(i))
  3828.       endif
  3829.  
  3830.       return
  3831.       end
  3832.  
  3833.       function tk_steel3(temp)
  3834.       implicit real *8 (a-h,o-z)
  3835.  
  3836.       dimension t(30),value(30)
  3837.  
  3838.       data (t(k),value(k),k=1,30) /
  3839.      1     100.0d0, 51.1d-3,
  3840.      2     150.0d0, 49.8d-3,
  3841.      3     200.0d0, 48.6d-3,
  3842.      4     250.0d0, 46.5d-3,
  3843.      5     300.0d0, 44.4d-3,
  3844.      6     350.0d0, 43.5d-3,
  3845.      7     400.0d0, 42.7d-3,
  3846.      8     450.0d0, 41.0d-3,
  3847.      9     500.0d0, 39.4d-3,
  3848.      &     550.0d0, 37.7d-3,
  3849.      1     600.0d0, 35.6d-3,
  3850.      2     650.0d0, 33.9d-3,
  3851.      3     700.0d0, 31.8d-3,
  3852.      4     750.0d0, 28.5d-3,
  3853.      5     800.0d0, 26.0d-3,
  3854.      6     850.0d0, 26.0d-3,
  3855.      7     900.0d0, 26.4d-3,
  3856.      8     950.0d0, 26.8d-3,
  3857.      9     100.0d1, 27.2d-3,
  3858.      &     105.0d1, 28.1d-3,
  3859.      1     110.0d1, 28.5d-3,
  3860.      2     115.0d1, 29.3d-3,
  3861.      3     120.0d1, 29.7d-3,
  3862.      4     125.0d1, 34.0d-3,
  3863.      5     130.0d1, 43.0d-3,
  3864.      6     135.0d1, 52.0d-3,
  3865.      7     140.0d1, 61.0d-3,
  3866.      8     145.0d1, 70.0d-3,
  3867.      9     150.0d1, 80.0d-3,
  3868.      &     300.0d1, 12.5d-2/
  3869.  
  3870.       t_c=temp-273.15d0
  3871.       if (t_c .le. t(1))  then
  3872.          tk_steel3=value(1)
  3873.       elseif (t_c .ge. t(30)) then
  3874.          tk_steel3=value(30)
  3875.       else
  3876.          do i=1,29
  3877.             if ((t_c .gt. t(i)) .and. (t_c .le. t(i+1))) exit
  3878.          enddo
  3879.          tk_steel3=value(i)+(value(i+1)-value(i)) &        *(t_c-t(i))/(t(i+1)-t(i))
  3880.       endif
  3881.       return
  3882.       end
  3883.       subroutine yurioka (t85,hv)
  3884.       implicit real*8 (a-h,o-z)
  3885.  
  3886.       include 'common.f'
  3887.  
  3888.       fn=50d0*(0.02d0-w_n)
  3889.       if (w_b .le. 1.0) then
  3890.          deltah=0.0d0
  3891.       elseif (w_b .le. 2.5) then
  3892.          deltah=0.03d0*fn
  3893.       elseif (w_b .le. 4.0) then
  3894.          deltah=0.06d0*fn
  3895.       else
  3896.          deltah=0.09d0*fn
  3897.       endif
  3898.  
  3899.       if (w_c .le. 0.3) then
  3900.          cp=w_c
  3901.       else
  3902.          cp=w_c/6.+0.25d0
  3903.       endif
  3904.  
  3905.       ce_i=cp+w_si/24.+w_mn/6.+w_cu/15.+w_ni/12.&     +w_cr*(1.-0.16*sqrt(w_cr))/8.+w_mo/4.+deltah
  3906.       tau_mart=exp(10.60*ce_i-4.80)
  3907.       h_mart=884.*w_c*(1.-0.3*w_c*w_c)+294.
  3908.      
  3909.       ce_ii=w_c+w_si/24.+w_mn/5.+w_cu/10.+w_ni/18.+w_cr/5. &     +w_mo/2.5+w_v/5.+w_nb/3.
  3910.       if (ce_ii .le. 0.75) then
  3911.          h_bain=197.0*ce_ii+117.
  3912.       else
  3913.          h_bain=145.0+130.d0*tanh(2.65*ce_ii-0.69)
  3914.       endif
  3915.  
  3916.       ce_iii=cp+w_mn/3.6+w_cu/20.+w_ni/9.+w_cr/5.+w_mo/4.
  3917.       tau_bain=exp(6.20*ce_iii+0.74)
  3918.  
  3919.       if (t85 .le. tau_mart) then
  3920.          hv=h_mart
  3921.       elseif (t85 .gt. tau_bain) then
  3922.          hv=h_bain
  3923.       else
  3924.          x=4.*log(t85/tau_mart)/log(tau_bain/tau_mart)-2.0d0
  3925.          hv=0.5d0*(h_mart+h_bain) &        -0.5d0*(h_mart-h_bain)*atan(x)/atan(2.0d0)
  3926.       endif
  3927.  
  3928.       return
  3929.       end
  3930.       subroutine yurioka2(t85,hv2)
  3931.       implicit real*8 (a-h,o-z)
  3932.  
  3933.       include 'common.f'
  3934.  
  3935.       fn=50d0*(0.02d0-w_n2)
  3936.       if (w_b2 .le. 1.0) then
  3937.          deltah=0.0d0
  3938.       elseif (w_b2 .le. 2.5) then
  3939.          deltah=0.03d0*fn
  3940.       elseif (w_b2 .le. 4.0) then
  3941.          deltah=0.06d0*fn
  3942.       else
  3943.          deltah=0.09d0*fn
  3944.       endif
  3945.  
  3946.       if (w_c2 .le. 0.3) then
  3947.          cp=w_c2
  3948.       else
  3949.          cp=w_c2/6.+0.25d0
  3950.       endif
  3951.  
  3952.       ce_i=cp+w_si2/24.+w_mn2/6.+w_cu2/15.+w_ni2/12. &     +w_cr2*(1.-0.16*sqrt(w_cr2))/8.+w_mo2/4.+deltah
  3953.       tau_mart=exp(10.60*ce_i-4.80)
  3954.       h_mart=884.*w_c2*(1.-0.3*w_c2*w_c2)+294.
  3955.      
  3956.       ce_ii=w_c2+w_si2/24.+w_mn2/5.+w_cu2/10.+w_ni2/18.+w_cr2/5.&     +w_mo2/2.5+w_v2/5.+w_nb2/3.
  3957.       if (ce_ii .le. 0.75) then
  3958.          h_bain=197.0*ce_ii+117.
  3959.       else
  3960.          h_bain=145.0+130.d0*tanh(2.65*ce_ii-0.69)
  3961.       endif
  3962.  
  3963.       ce_iii=cp+w_mn2/3.6+w_cu2/20.+w_ni2/9.+w_cr2/5.+w_mo2/4.
  3964.       tau_bain=exp(6.20*ce_iii+0.74)
  3965.  
  3966.       if (t85 .le. tau_mart) then
  3967.          hv2=h_mart
  3968.       elseif (t85 .gt. tau_bain) then
  3969.          hv2=h_bain
  3970.       else
  3971.          x=4.*log(t85/tau_mart)/log(tau_bain/tau_mart)-2.0d0
  3972.          hv2=0.5d0*(h_mart+h_bain)&        -0.5d0*(h_mart-h_bain)*atan(x)/atan(2.0d0)
  3973.       endif
  3974.  
  3975.       return
  3976.       end
  3977.  
  3978.       subroutine zcompcalc(id,tbulk,press,zcomp)
  3979.       implicit real*8 (a-h,o-z)
  3980.       dimension tc(5),pc(5)
  3981.  
  3982.       data (tc(i),i=1,5)/126.2, 191.1, 33.3, 647.4, 282.4/
  3983.       data (pc(i),i=1,5)/33.5, 45.8, 12.8, 218.3, 50.5/
  3984.       tr=tbulk/tc(id)
  3985.       pr=9.869233d-6*press/pc(id)
  3986.  
  3987.       a=1.0
  3988.       b=-(1.0+0.125*pr/tr)/3.
  3989.       c=9.*pr/64./tr/tr
  3990.       d=-27.*pr*pr/512./tr/tr/tr
  3991.  
  3992.       q=a*c-b*b
  3993.       r=0.5*(3.*a*b*c-a*a*d)-b*b*b
  3994.       qr=q*q*q+r*r
  3995.  
  3996.       s1=(r+sqrt(qr))**(1./3.)
  3997.       s2=(r-sqrt(qr))**(1./3.)
  3998.       zcomp=(s1+s2-b)/a
  3999.  
  4000.       return
  4001.       end
  4002.  
  4003.       subroutine elg4(n0,n1,n2,n3,n4,ne1rw,nd1rw,ned1rw,&     nrow,ndrw,nedrw,iarray)
  4004.       dimension iarray (1000,5)
  4005.  
  4006.       iarray(1,1) = n0
  4007.       iarray(1,2) = n1
  4008.       iarray(1,3) = n2
  4009.       iarray(1,4) = n3
  4010.       iarray(1,5) = n4
  4011.  
  4012.       do 200 i=2,ne1rw
  4013.       iarray(i,1) = iarray((i-1),1)+ned1rw
  4014.       do 200 l=2,5
  4015. 200   iarray(i,l) = iarray((i-1),l)+nd1rw
  4016.  
  4017.       do 400 j=2,nrow
  4018.       do 400 i=1,ne1rw
  4019.       iarray(ne1rw*(j-1)+i,1) = iarray(ne1rw*(j-2)+i,1)+nedrw
  4020.       do 400 l=2,5,1
  4021. 400   iarray(ne1rw*(j-1)+i,l) = iarray(ne1rw*(j-2)+i,l)+ndrw
  4022.  
  4023.       return
  4024.       end
  4025.  
  4026.       subroutine ng_line(node_f,node_l,node_d,cord_f,cord_l,b_factor)
  4027.  
  4028.       implicit real*8 (a-h,o-z)
  4029.       dimension cord_f(2),cord_l(2),x(1000),y(1000)
  4030.  
  4031.       common /coord/x,y
  4032.       data none/1/,ntwo/2/
  4033.       data one/1.d0/
  4034.  
  4035.       nnode = (node_l-node_f)/node_d
  4036.       dr=one
  4037.       do 110 k=none,nnode-none,none
  4038. 110   dr=dr+b_factor**k
  4039.       x0 = (cord_l(1)-cord_f(1))/dr
  4040.       y0 = (cord_l(2)-cord_f(2))/dr
  4041.  
  4042.       x(node_f+node_d) = cord_f(1)+x0
  4043.       y(node_f+node_d) = cord_f(2)+y0
  4044.       do 210 k=ntwo,nnode-none,none
  4045.       nd = node_f+node_d*k
  4046.       x(nd) = x(nd-node_d)+x0*b_factor**(k-none)
  4047.       y(nd) = y(nd-node_d)+y0*b_factor**(k-none)
  4048. 210   continue
  4049.  
  4050.       return
  4051.       end
  4052.  
  4053.       subroutine assemble(nnode,inode,coord,nelem,ielem,&     inelem,ael,x_g,stiff)
  4054.  
  4055.       implicit real*8 (a-h,o-z)
  4056.       dimension :: inode(nnode),coord(2,nnode)
  4057.       dimension :: ielem(4,nelem),inelem(4,nelem),x_g(2,4,nelem)
  4058.       dimension :: ael(4,nelem),stiff(4,4,nelem)
  4059.       dimension :: x(2,4)
  4060.       dimension :: phi0(4,4),dphi(4,4,2),n_e(4)
  4061.       dimension :: r_a(2,2),r_a_e(2,2,4),vj_e(4,nelem)
  4062.     real*8 value
  4063.  
  4064.     value = 0.0d0
  4065.       do i=1,4
  4066.          do j=1,4
  4067.             call phi(0,value,i,j,0)
  4068.             phi0(i,j)=value
  4069.             do k=1,2
  4070.                call phi(1,value,i,j,k)
  4071.                dphi(i,j,k)=value
  4072.             enddo
  4073.          enddo
  4074.       enddo
  4075.  
  4076.       do i=1,nelem
  4077.          do ii=1,4    
  4078.             n_e(ii)=inelem(ii,i)
  4079.          enddo
  4080.  
  4081.          do jj=1,4
  4082.             do ii=1,2
  4083.                x(ii,jj)=coord(ii,n_e(jj))
  4084.             enddo
  4085.          enddo
  4086.  
  4087.          do ii=1,4
  4088.             do jj=1,2  
  4089.                sum=0.0d0
  4090.                do kk=1,4
  4091.                   sum=sum+x(jj,kk)*phi0(kk,ii)
  4092.                enddo
  4093.                x_g(jj,ii,i)=sum
  4094.             enddo
  4095.          enddo
  4096.  
  4097.          do ii=1,4
  4098.             call jacob(x,vj,r_a,ii,dphi)
  4099.             vj_e(ii,i)=vj
  4100.             do jj=1,2
  4101.                do kk=1,2
  4102.                   r_a_e(jj,kk,ii)=r_a(jj,kk)
  4103.                enddo
  4104.             enddo
  4105.          enddo
  4106.  
  4107.          do ii=1,4
  4108.             ael(ii,i)=x_g(1,1,i)*phi0(ii,1)*vj_e(1,i)
  4109.      &           +x_g(1,2,i)*phi0(ii,2)*vj_e(2,i)
  4110.      &           +x_g(1,3,i)*phi0(ii,3)*vj_e(3,i)
  4111.      &           +x_g(1,4,i)*phi0(ii,4)*vj_e(4,i)
  4112.          enddo
  4113.  
  4114.          do ii=1,4
  4115.             do jj=ii,4
  4116.                sum=0.0d0
  4117.                do kk=1,4
  4118.                   dphidx_i=r_a_e(1,1,kk)*dphi(ii,kk,1)
  4119.      &                 +r_a_e(1,2,kk)*dphi(ii,kk,2)
  4120.                   dphidx_j=r_a_e(1,1,kk)*dphi(jj,kk,1)
  4121.      &                 +r_a_e(1,2,kk)*dphi(jj,kk,2)
  4122.                   dphidy_i=r_a_e(2,1,kk)*dphi(ii,kk,1)
  4123.      &                 +r_a_e(2,2,kk)*dphi(ii,kk,2)
  4124.                   dphidy_j=r_a_e(2,1,kk)*dphi(jj,kk,1)
  4125.      &                 +r_a_e(2,2,kk)*dphi(jj,kk,2)
  4126.                   dphidx=dphidx_i*dphidx_j
  4127.                   dphidy=dphidy_i*dphidy_j
  4128.                   sum=x_g(1,kk,i)*(dphidx+dphidy)*vj_e(kk,i)+sum
  4129.                enddo
  4130.                stiff(ii,jj,i)=sum
  4131.                stiff(jj,ii,i)=stiff(ii,jj,i)
  4132.             enddo
  4133.          enddo
  4134.       enddo
  4135.  
  4136.       return
  4137.       end
  4138.       subroutine post1(iaba,kpn,cctime,crate,t_kp_max,kp)
  4139.       implicit real*8 (a-h,o-z)
  4140.       dimension cctime(kpn),crate(kpn),t_kp_max(kpn),kp(kpn)
  4141.       include 'common.f'
  4142.  
  4143.       i1=0
  4144.       i2=0
  4145.       i3=0
  4146.       if (cctime(1).gt.1.0d-3) i1=1
  4147.       if (cctime(2).gt.1.0d-3) i2=1
  4148.       if (cctime(3).gt.1.0d-3) i3=1
  4149.       if ((i1+i2+i3) .eq. 0) then
  4150.          write(10,*)  'Model fails to give a cooling time'
  4151.       else
  4152.          coolt=(cctime(1)*i2*2.0d0
  4153.      &        +cctime(2)*i2*4.0d0
  4154.      &        +cctime(3)*i3*2.0d0)
  4155.      &        /(i1*2.0d0+i2*4.0d0+i3*2.0d0)
  4156. Comment Check        
  4157.          write(12,*) 'cctime(1)=',cctime(1)
  4158.          write(12,*) 'cctime(2)=',cctime(2)
  4159.          write(12,*) 'cctime(3)=',cctime(3)
  4160.          write(12,*) 'cooltime=',coolt
  4161.  
  4162.       end if
  4163.  
  4164.       crate_max=0.0d0
  4165.       do i=1,3
  4166.          if (dabs(crate(i)) .gt. 1.0d-3) then
  4167.             crate_max=dmax1(crate_max,dabs(crate(i)))
  4168.          endif
  4169.       end do
  4170.       write(12,*) 'crate(1)=',crate(1)
  4171.       write(12,*) 'crate(2)=',crate(2)
  4172.       write(12,*) 'crate(3)=',crate(3)
  4173.       write(12,*) 'max. cool rate=',crate_max
  4174.       if (crate_max .lt. 1.0d-3) then
  4175.          write(10,*) 'model fails to give a cooling rate'
  4176.       end if
  4177.  
  4178.       if (carbon_eq .gt. 1.0d-3) then
  4179.          call yurioka(cctime(3),hv)
  4180.        call yurioka2(cctime(1),hv2)
  4181.  
  4182.        if ( id_conf .eq. 3 ) then
  4183.  
  4184.         write(10,5) cctime(1),cctime(1),crate_max,t_kp_max(kpn),hv,0.0  !12/16/2009 !02/24/2010
  4185.        else
  4186.  
  4187.          write(10,5) cctime(3),cctime(1),crate_max,t_kp_max(kpn),hv,hv2
  4188.        end if
  4189.       else
  4190.          write(10,7) coolt,crate_max,t_kp_max(kpn),'Not Requested'
  4191.       endif
  4192.  
  4193.       do i=6,12,6
  4194.          write(i,3) 'ANALYSIS COMPLETED SUCCESSFULLY!'
  4195.          write(i,3), 'T85 TIME (sec)','COOL. RATE (K/sec)', &        'MAX. TEMP (C)','MAX. HAZ HARDNESS (Hv)'
  4196.          if (carbon_eq .gt. 1.0d-3) then
  4197.             write(i,5) coolt,crate_max,t_kp_max(kpn)-273.,hv
  4198.          else
  4199.             write(i,7) coolt,crate_max,t_kp_max(kpn)-273.,&           'Not Requested'
  4200.          endif
  4201.       enddo
  4202.    
  4203.     if ( id_conf .eq. 3 ) then
  4204.     write(10,8) CCTIME(1),CCTIME(1),CCTIME(1)           !02/24/2010
  4205.     else
  4206.     write(10,8) CCTIME(1),CCTIME(2),CCTIME(3)
  4207.     end if
  4208.  
  4209.  3    format(1X,A,2x,A,2x,A,2x,A)
  4210.  5    format(1x,G12.5,5x,G12.5,5x,G12.5,5x,G12.5,6x,G12.5,6x,G12.5)         !08/26/2009
  4211.  7    format(1x,G12.5,5x,G12.5,5x,G12.5,5x,A)
  4212.  8    FORMAT(1X,3g12.5)
  4213.       return
  4214.       end
  4215.  
  4216.       subroutine post3(iaba,kpn,cctime,crate,t_kp_max,kp,hdmax1,hdmax2)
  4217.       implicit real*8 (a-h,o-z)
  4218.       dimension cctime(kpn),crate(kpn),t_kp_max(kpn),kp(kpn)
  4219.       include 'common.f'
  4220.  
  4221.       i1=0
  4222.       i2=0
  4223.       i3=0
  4224.       if (cctime(1).gt.1.0d-3) i1=1
  4225.       if (cctime(2).gt.1.0d-3) i2=1
  4226.       if (cctime(3).gt.1.0d-3) i3=1
  4227.       if ((i1+i2+i3) .eq. 0) then
  4228.          write(10,*)  'Model fails to give a cooling time'
  4229.       else
  4230.          coolt=(cctime(1)*i2*2.0d0
  4231.      &        +cctime(2)*i2*4.0d0
  4232.      &        +cctime(3)*i3*2.0d0)
  4233.      &        /(i1*2.0d0+i2*4.0d0+i3*2.0d0)
  4234.          write(12,*) 'cctime(1)=',cctime(1)
  4235.          write(12,*) 'cctime(2)=',cctime(2)
  4236.          write(12,*) 'cctime(3)=',cctime(3)
  4237.          write(12,*) 'cooltime=',coolt
  4238.       end if
  4239.  
  4240.       crate_max=0.0d0
  4241.       do i=1,3
  4242.          if (dabs(crate(i)) .gt. 1.0d-3) then
  4243.             crate_max=dmax1(crate_max,dabs(crate(i)))
  4244.          endif
  4245.       end do
  4246.       write(12,*) 'crate(1)=',crate(1)
  4247.       write(12,*) 'crate(2)=',crate(2)
  4248.       write(12,*) 'crate(3)=',crate(3)
  4249.       write(12,*) 'max. cool rate=',crate_max
  4250.       if (crate_max .lt. 1.0d-3) then
  4251.          write(10,*) 'model fails to give a cooling rate'
  4252.       end if
  4253.  
  4254.       if (carbon_eq .gt. 1.0d-3) then
  4255.          call yurioka(cctime(3),hv)
  4256.        call yurioka2(cctime(1),hv2)
  4257.        if ( id_conf .eq. 3 ) then
  4258.           write(10,5) cctime(1),cctime(1),crate_max,t_kp_max(kpn),      !12/16/2009 !02/24/2010&            hdmax1,0.0
  4259.        else
  4260.       if(id_conf.eq.1) kpn=10
  4261.           write(10,5) cctime(3),cctime(1),crate_max,t_kp_max(kpn),&        hdmax1,hdmax2            !08/26/2009
  4262.        end if
  4263.       else
  4264.          write(10,7) coolt,crate_max,t_kp_max(kpn),'Not Requested'
  4265.       endif
  4266.  
  4267.       do i=6,12,6
  4268.          write(i,3) 'ANALYSIS COMPLETED SUCCESSFULLY!'
  4269.          write(i,3), 'T85 TIME (sec)','COOL. RATE (K/sec)',&        'MAX. TEMP (C)','MAX. HAZ HARDNESS (Hv)'
  4270.          if (carbon_eq .gt. 1.0d-3) then
  4271.             write(i,5) coolt,crate_max,t_kp_max(kpn)-273.,hv
  4272.          else
  4273.             write(i,7) coolt,crate_max,t_kp_max(kpn)-273.,&           'Not Requested'
  4274.          endif
  4275.       enddo    
  4276.  
  4277.       if ( id_conf .eq. 3 ) then
  4278.        WRITE(10,*) "Yurioka: ", hv,0.0
  4279.          testt=1.0
  4280.        WRITE(10,*) "Kirkaldy: ", hdmax1,0.0
  4281.     else
  4282.        WRITE(10,*) "Yurioka: ", hv, hv2
  4283.        WRITE(10,*) "Kirkaldy: ", hdmax1, hdmax2
  4284.     end if
  4285.  
  4286.     if ( id_conf .eq. 3 ) then
  4287.     write(10,8) CCTIME(1),CCTIME(1),CCTIME(1)           !02/24/2010
  4288.     else
  4289.     write(10,8) CCTIME(1),CCTIME(2),CCTIME(3)
  4290.     end if
  4291.  
  4292.  3    format(1X,A,2x,A,2x,A,2x,A)
  4293.  5    format(1x,G12.5,5x,G12.5,5x,G12.5,5x,G12.5,6x,2G12.5)
  4294.  7    format(1x,G12.5,5x,G12.5,5x,G12.5,5x,A)
  4295.  8    FORMAT(1X,3g12.5)
  4296.     return
  4297.     end
  4298.  
  4299.       subroutine post2(iaba,kpn,cctime,crate,t_kp_max,kp)
  4300.       implicit real*8 (a-h,o-z)
  4301.       dimension cctime(kpn),crate(kpn),t_kp_max(kpn),kp(kpn)
  4302.       include 'common.f'
  4303.  
  4304.       write(10,7) cctime(1),abs(crate(1)),t_kp_max(2)
  4305.  
  4306.       do i=6,12,6
  4307.          write(i,3) 'ANALYSIS COMPLETED SUCCESSFULLY!'
  4308.          write(i,3), 'COOL. TIME (sec)','COOL. RATE (K/sec)', &        'MAX. TEMP (C)'
  4309.          write(i,7) cctime(1),abs(crate(1)),t_kp_max(2)-273.
  4310.       enddo
  4311.  
  4312.  3    format(1X,A,2x,A,2x,A,2x,A)
  4313.  5    format(1x,G12.5,5x,G12.5,5x,G12.5,6x,G12.5)
  4314.  7    format(3x,G12.5,5x,G12.5,5x,G12.5,5x,A)
  4315.  
  4316.       return
  4317.  
  4318.       end
  4319.  
  4320.       subroutine PrepareForMicrostructureCalculation(NNODE)
  4321.       implicit real*8 (a-h,o-z)
  4322.     parameter ( nn = 10000 )
  4323.     include "common.f"
  4324.  
  4325.     real*8 C, Mn, Si, Ni, Cr, Mo, Cu, W, V, Nb, Ti, Al, N
  4326.     REAL*8 C2,Mn2,Si2,Ni2,Cr2,Mo2,Cu2,W2,V2,Nb2,Ti2,Al2,N2
  4327.     real*8 AC1_1,AC3_1,TDISS1,AE4_1,AE3_1,AE1_1,TBS1,TMS1,as1_1
  4328.      &  ,Tliquid1,Tsolid1
  4329.     real*8 AC1_2,AC3_2,TDISS2,AE4_2,AE3_2,AE1_2,TBS2,TMS2,as1_2
  4330.      &  ,Tliquid2,Tsolid2
  4331.     real*8 GS0,G0,hv0,gsmax
  4332.     real*8 XFE1,XPE1, xfe2,xpe2
  4333.     REAL*8 XA(NN),XF(NN),XP(NN),XB(NN),XM(NN),GS(NN),G(NN),HV(NN),XL(NN)
  4334.     real*8 fc1,pc1,bc1,FC2,PC2,BC2
  4335.     real*8 xcompos(13), krate(3)
  4336.     dimension nodeflag(nn)
  4337.  
  4338.     COMMON/COMP/C,Mn,Si,Ni,Cr,Mo,Cu,W,V,Nb,Ti,Al,N
  4339.     COMMON/COMP2/C2,Mn2,Si2,Ni2,Cr2,Mo2,Cu2,W2,V2,Nb2,Ti2,Al2,N2
  4340.     COMMON/TEMPS/AC1_1,AC3_1,TDISS1,AE4_1,AE3_1,AE1_1,TBS1,TMS1,as1_1
  4341.      &  ,Tliquid1,Tsolid1
  4342.     COMMON/TEMPS2/AC1_2,AC3_2,TDISS2,AE4_2,AE3_2,AE1_2,TBS2,TMS2,as1_2
  4343.      &  ,Tliquid2,Tsolid2
  4344.     COMMON/STRUCT/XA,XF,XP,XB,XM,GS,G,HV,XL
  4345.     COMMON/KCONST/fc1,pc1,bc1
  4346.     COMMON/KCONST2/fc2,pc2,bc2
  4347.     COMMON/BASELINE/XFE1,XPE1
  4348.     COMMON/BASELINE2/XFE2,XPE2
  4349.     COMMON/KINI/GS0,G0,hv0,gsmax
  4350.     common/nodetype/nodeflag
  4351.  
  4352.     XCOMPOS(1) = w_c
  4353.     XCOMPOS(2) = w_mn
  4354.     XCOMPOS(3) = w_si
  4355.     XCOMPOS(4) = w_ni
  4356.     XCOMPOS(5) = w_cr
  4357.     XCOMPOS(6) = w_mo
  4358.     XCOMPOS(7) = w_cu
  4359.     XCOMPOS(8) = 0.0d0                   !!!!w_w, no w_w, hard-code it
  4360.     XCOMPOS(9) = w_v
  4361.     XCOMPOS(10) = w_nb
  4362.     XCOMPOS(11) = 0.0d0                     !!!!w_ti, no w_ti, hard-code it
  4363.     XCOMPOS(12) = 0.0d0                  !!!!w_al, no w_al, hard-code it
  4364.     XCOMPOS(13) = w_n
  4365.     C = w_c
  4366.     Mn = w_mn
  4367.     Si = w_si
  4368.     Ni = w_ni
  4369.     Cr = w_cr
  4370.     Mo = w_mo
  4371.     Cu = w_cu
  4372.     W = 0.0d0                   !!!!w_w, no w_w, hard-code it
  4373.     V = w_v
  4374.     Nb = w_nb
  4375.     Ti = 0.0d0                  !!!!w_ti, no w_ti, hard-code it
  4376.     Al = 0.0d0                  !!!!w_al, no w_al, hard-code it
  4377.     N = w_n
  4378.  
  4379.     CALL THERMODYNAMICS(XCOMPOS,XFE1,XPE1,TMS1,TBS1,AE1_1,
  4380.      &  AE3_1,TDISS1,AE4_1,Tsolid1,Tliquid1,as1_1,krate)
  4381.     fc1 = krate(1)
  4382.     pc1 = krate(2)
  4383.     bc1 = krate(3)
  4384.     AC1_1=AE1_1+0.d0
  4385.     AC3_1=AE3_1+0.d0
  4386.     IF (TDISS1 .LT. AC3_1) THEN
  4387.        TDISS1=AC3_1+0.d0
  4388.     ELSE
  4389.        TDISS1=AC3_1+100.d0
  4390.     ENDIF
  4391.  
  4392.     XCOMPOS(1) = w_c2
  4393.     XCOMPOS(2) = w_mn2
  4394.     XCOMPOS(3) = w_si2
  4395.     XCOMPOS(4) = w_ni2
  4396.     XCOMPOS(5) = w_cr2
  4397.     XCOMPOS(6) = w_mo2
  4398.     XCOMPOS(7) = w_cu2
  4399.     XCOMPOS(8) = 0.0d0                   !!!!w_w, no w_w, hard-code it
  4400.     XCOMPOS(9) = w_v2
  4401.     XCOMPOS(10) = w_nb2
  4402.     XCOMPOS(11) = 0.0d0                     !!!!w_ti, no w_ti, hard-code it
  4403.     XCOMPOS(12) = 0.0d0                  !!!!w_al, no w_al, hard-code it
  4404.     XCOMPOS(13) = w_n2
  4405.     C2 = w_c2
  4406.     Mn2 = w_mn2
  4407.     Si2 = w_si2
  4408.     Ni2 = w_ni2
  4409.     Cr2 = w_cr2
  4410.     Mo2 = w_mo2
  4411.     Cu2 = w_cu2
  4412.     W2 = 0.0d0                   !!!!w_w, no w_w, hard-code it
  4413.     V2 = w_v2
  4414.     Nb2 = w_nb2
  4415.     Ti2 = 0.0d0                     !!!!w_ti, no w_ti, hard-code it
  4416.     Al2 = 0.0d0                  !!!!w_al, no w_al, hard-code it
  4417.     N2 = w_n2
  4418.  
  4419.     CALL THERMODYNAMICS(XCOMPOS,XFE2,XPE2,TMS2,TBS2,AE1_2,AE3_2,TDISS2
  4420.      &  ,AE4_2,Tsolid2,Tliquid2,as1_2,krate)
  4421.     fc2 = krate(1)
  4422.     pc2 = krate(2)
  4423.     bc2 = krate(3)
  4424.     AC1_2=AE1_2+0.d0
  4425.     AC3_2=AE3_2+0.d0
  4426.     IF (TDISS2 .LT. AC3_2) THEN
  4427.        TDISS2=AC3_2+0.d0
  4428.     ELSE
  4429.        TDISS2=AC3_2+100.d0
  4430.     ENDIF
  4431.  
  4432.  
  4433.     G01=1.0D0+2.0D0*DLOG(0.254D0/GS01)/DLOG(2.0D0)
  4434.     G02=1.0D0+2.0D0*DLOG(0.254D0/GS02)/DLOG(2.0D0)
  4435.     hv0=165.D0
  4436.     gsmax=0.3D0
  4437.  
  4438.     DO I=1,NNODE,1
  4439.        HV(I)=hv0
  4440.        if (nodeflag(i) .eq. 1 ) then
  4441.         GS(I)=GS02*1.0d-3
  4442.         G(I)=G02
  4443.        else
  4444.         GS(I) = GS01*1.0d-3
  4445.         G(I) = G01
  4446.        end if
  4447.        XF(I)=XFE
  4448.        XP(I)=1.0D0-XPE
  4449.        XB(I)=0.0D0
  4450.        XM(I)=0.0D0
  4451.        XA(I)=0.0D0
  4452.        XL(I)=0.0D0
  4453.       END DO
  4454.     return
  4455.     end
  4456.  
  4457.       subroutine MicrostructureTransition(time1, time2, temp1,&     temp2, peak, vr,nnode)
  4458.       implicit double precision (a-h,o-z)
  4459.     parameter (nn=10000)
  4460.     REAL*8 temp1(*), temp2(*), peak(nn), vr(nn)
  4461.     REAL*8 tempC1(NN), tempC2(NN)
  4462.  
  4463.     real*8 time1, time2, deltat
  4464.     real*8 C,Mn,Si,Ni,Cr,Mo,Cu,W,V,Nb,Ti,Al,N
  4465.     REAL*8 C2,Mn2,Si2,Ni2,Cr2,Mo2,Cu2,W2,V2,Nb2,Ti2,Al2,N2
  4466.     real*8 AC1,AC3,TDISS,AE4,AE3,AE1,TBS,TMS,as1,Tliquid,Tsolid
  4467.     real*8 AC1_2,AC3_2,TDISS2,AE4_2,AE3_2,AE1_2,TBS2,TMS2,as1_2&    ,Tliquid2,Tsolid2
  4468.     real*8 XFE1,XPE1,XFE2,XPE2
  4469.     REAL*8 XA(NN),XF(NN),XP(NN),XB(NN),XM(NN),GS(NN),G(NN),HV(NN)&  ,XL(NN)
  4470.     real*8 fc1,pc1,bc1,FC2,PC2,BC2
  4471.     real*8 GS0,G0,hv0,gsmax
  4472.  
  4473.     COMMON/COMP/C,Mn,Si,Ni,Cr,Mo,Cu,W,V,Nb,Ti,Al,N
  4474.     COMMON/COMP2/C2,Mn2,Si2,Ni2,Cr2,Mo2,Cu2,W2,V2,Nb2,Ti2,Al2,N2
  4475.     COMMON/TEMPS/AC1_1,AC3_1,TDISS1,AE4_1,AE3_1,AE1_1,TBS1,TMS1,as1_1&  ,Tliquid1,Tsolid1
  4476.     COMMON/TEMPS2/AC1_2,AC3_2,TDISS2,AE4_2,AE3_2,AE1_2,TBS2,TMS2,as1_2& ,Tliquid2,Tsolid2
  4477.     COMMON/STRUCT/XA,XF,XP,XB,XM,GS,G,HV,XL
  4478.     COMMON/KCONST/fc1,pc1,bc1
  4479.     COMMON/KCONST2/fc2,pc2,bc2
  4480.     COMMON/BASELINE/XFE1,XPE1
  4481.     COMMON/BASELINE2/XFE2,XPE2
  4482.       COMMON/KINI/GS0,G0,hv0,gsmax
  4483.  
  4484.  
  4485.     deltat = (time2-time1)/1.0d2
  4486.     DO I = 1, NNODE
  4487.         TEMPC1(I) = TEMP1(I) - 273.15D0
  4488.         TEMPC2(I) = TEMP2(I) - 273.15D0
  4489.     END DO
  4490.     CALL TRANSFORMATION(TIME1,TEMPC1,TIME2,TEMPC2,DELTAT,PEAK,VR,NNODE)
  4491.  
  4492.     return
  4493.     end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement