program f90_NUMheat !**************************************************************** !Optimization of node numbers for 2D heat conduction analysis !**************************************************************** implicit none integer::i,j,k,l,ne character(len=50)::ftinp !File name for temperature time history character(len=100)::strcom !Comment integer::NODT !Number of nodes integer::NELT !Number of elements integer::MATEL !Number of material sets integer::KOT !Number of nodes with given temerature integer::KOC !Number of sides with the condition of heat transfer boundary integer::nod=4 !Number of nodes per element integer::nhen=1 !Number of degree of freedom per node integer::nt !Number of degrees of freedom of all nodes (NODT x nhen) integer::mm !Number of degree s of freedom of reduced FE equation integer::ib !Band width of reduced matrix integer,allocatable::kakom(:,:) !Element connectivity integer,allocatable::matno(:) !Material set number real(8),allocatable::wm(:,:) !work for material properties real(8),allocatable::x(:) !x-coordinate of node real(8),allocatable::y(:) !y-coordinate of node integer,allocatable::nokt(:) !Node number with given temperature integer,allocatable::nekc(:,:) !Element number and side number with the condition of heat transfer boundary real(8),allocatable::alphac(:) !Heat transfer rate of specified side real(8),allocatable::tempe0(:) !Initial value of nodal temperature real(8)::delta !Time increment real(8)::ttime !Time integer::itmax !Number of time steps integer::nout !Number of nodes for output of temperature time history integer,allocatable::noout(:) !Node number for output of temperature time history integer::ntout !Frequency of output of all nodal temperature integer,allocatable::nntout(:) !Step number for output of all nodal temperature real(8),allocatable::tempend(:,:)!Nodal temperature for output integer,allocatable::numr(:) !Original node numbers integer,allocatable::jnd(:) !Revised node numbers character::linebuf*1000 character::str*20 character::fnameR*50,fnameW*50 !Input file name, output file name call getarg(1,fnameR) !Input file name call getarg(2,fnameW) !Output file name open(11,file=fnameR,status='old') read(11,'(a)') strcom read(11,'(a)') ftinp read(11,*) NODT,NELT,MATEL,KOT,KOC,delta nt=NODT*nhen allocate(kakom(1:NELT,1:nod)) allocate(matno(1:NELT)) allocate(wm(1:MATEL,1:5)) allocate(x(1:NODT)) allocate(y(1:NODT)) allocate(nokt(1:KOT)) allocate(nekc(1:KOC,1:2)) allocate(alphac(1:KOC)) allocate(tempe0(1:nt)) allocate(numr(1:NODT)) allocate(jnd(1:NODT)) do i=1,MATEL read(11,*) wm(i,1),wm(i,2),wm(i,3),wm(i,4),wm(i,5) end do do ne=1,NELT read(11,*) kakom(ne,1),kakom(ne,2),kakom(ne,3),kakom(ne,4),matno(ne) end do do i=1,NODT read(11,*) x(i),y(i),tempe0(i) end do if(0