37 logical identity,gravity,gaspipe
40 character*20 labmpc(*)
43 integer mi(*),ieg(*),nflow,i,j,ntg,ielmat(mi(3),*),ntmat_,
44 & node1,node2,ider,iaxial,nmpc,ipompc(*),nodempc(3,*),
45 & nelem,index,nshcon(*),ipkon(*),kon(*),ikboun(*),nboun,idof,
46 & nodem,idirf(8),nactdog(0:3,*),imat,ielprop(*),id1,id2,
47 & nodef(8),ndirboun(*),nodeboun(*),itg(*),node,kflag,ipiv(*),
48 & nrhs,info,idof1,idof2,nteq,nrhcon(*),ipobody(2,*),ibody(3,*),
49 & nbody,numf,network,iin_abs,icase,index2,index1,nelem1,nelem2,
50 & node11,node21,node12,node22,istep,iit,ineighe(*),iponoel(*),
51 & ilboun(*),idir,channel,inoel(2,*),indexe,iel
53 real*8 ac(nteq,nteq), bc(nteq),prop(*),shcon(0:3,ntmat_,*),
54 & f,
df(8),xflow,xbounact(*),v(0:mi(2),*),cp,r,tg1,
55 & tg2,gastemp,physcon(*),pressmin,dvi,rho,g(3),
z1,z2,
56 & rhcon(0:1,ntmat_,*),co(3,*),xbodyact(7,*),kappa,
57 & a,tt,pt,ts,pressmax,constant,vold(0:mi(2),*),
58 & coefmpc(*),ttime,time,xflow360
68 v(ndirboun(j),nodeboun(j))=xbounact(j)
75 if(lakon(nelem)(2:5).eq.
'LICH')
then 97 & ielmat,ntmat_,shcon,nshcon,rhcon,nrhcon,mi,iponoel,inoel,
109 if(v(2,node).lt.1.d-10)
then 112 if(pressmin.lt.0.d0)
then 114 elseif(v(2,node).lt.pressmin)
then 118 if(v(2,node).gt.pressmax)
then 125 if(pressmin.lt.0.d0)
then 127 &
'*ERROR in initialnet: minimum initial pressure' 128 write(*,*)
' is smaller than zero' 142 call nident(itg,node1,ntg,id1)
143 call nident(itg,node2,ntg,id2)
145 if(iin_abs.eq.0)
then 146 if ((lakon(nelem)(2:5).eq.
'GAPF').or.
147 & ((lakon(nelem)(2:3).eq.
'RE')
148 & .and.(lakon(nelem)(2:7).ne.
'REWAOR')).or.
149 & (lakon(nelem)(2:3).eq.
'UP'))
then 159 if (ineighe(id1).ge.0)
then 162 ineighe(id1)=ineighe(id1)+1
167 if (ineighe(id2).ge.0)
then 169 ineighe(id2)=ineighe(id2)+1
190 if((node1.eq.0).or.(node2.eq.0)) cycle
191 if(v(2,node1).lt.1.d-10)
then 192 v(2,node1)=v(2,node1)-1.d0
194 if(v(2,node2).lt.1.d-10)
then 195 v(2,node2)=v(2,node2)-1.d0
208 if(nactdog(2,node).eq.0)
then 212 if((nactdog(2,node).ne.0)
213 & .and.(v(2,node).gt.0d0))
then 217 if(abs(v(2,node)+1.d0).lt.1.d-10)
then 233 if((node1.eq.0).or.(node2.eq.0))
exit 237 if(((node1.eq.node).and.(v(1,nodem).ge.0.d0)).or.
238 & ((node2.eq.node).and.(v(1,nodem).le.0.d0)))
then 239 v(2,node)=0.95d0*pressmin
240 pressmin=0.95d0*pressmin
242 v(2,node)=1.05d0*pressmax
243 pressmax=1.05d0*pressmax
254 if(nactdog(2,node).eq.0)
then 255 v(2,node)=dtan(v(2,node)
256 & *constant/pressmax)
258 elseif(v(2,node).gt.0d0)
then 259 v(2,node)=dtan(v(2,node)
260 & *constant/pressmax)
269 if(nactdog(j,node).ne.0)
then 275 if(nactdog(j,node).ne.0)
then 289 if((node1.eq.0).or.(node2.eq.0)) cycle
290 idof1=nactdog(2,node1)
291 idof2=nactdog(2,node2)
293 if(v(2,node1).gt.0.d0)
then 298 ac(idof1,idof1)=ac(idof1,idof1)+1.d0
299 if(v(2,node2).gt.0.d0)
then 301 bc(idof1)=bc(idof1)+v(2,node2)
303 ac(idof1,idof2)=ac(idof1,idof2)-1.d0
308 if(v(2,node2).gt.0.d0)
then 313 ac(idof2,idof2)=ac(idof2,idof2)+1.d0
314 if(v(2,node1).gt.0.d0)
then 316 bc(idof2)=bc(idof2)+v(2,node1)
318 ac(idof2,idof1)=ac(idof2,idof1)-1.d0
328 if(nactdog(2,node).ne.0)
then 330 if(ac(idof,idof).eq.0.d0)
then 341 if(network.ne.4)
then 351 if((node1.eq.0).or.(node2.eq.0)) cycle
352 idof1=nactdog(0,node1)
353 idof2=nactdog(0,node2)
355 if(v(0,node1).gt.0.d0)
then 363 elseif(v(1,nodem).lt.0.d0)
then 364 ac(idof1,idof1)=ac(idof1,idof1)+1.d0
365 if(v(0,node2).gt.0.d0)
then 367 bc(idof1)=bc(idof1)+v(0,node2)
369 ac(idof1,idof2)=ac(idof1,idof2)-1.d0
374 if(v(0,node2).gt.0.d0)
then 383 elseif(v(1,nodem).ge.0.d0)
then 384 ac(idof2,idof2)=ac(idof2,idof2)+1.d0
385 if(v(0,node1).gt.0.d0)
then 387 bc(idof2)=bc(idof2)+v(0,node1)
389 ac(idof2,idof1)=ac(idof2,idof1)-1.d0
399 if(nactdog(0,node).ne.0)
then 401 if(ac(idof,idof).eq.0.d0)
then 412 if(dabs(ac(j,j)).lt.1.d-20) ac(j,j)=1.d0
419 call dgesv(nteq,nrhs,ac,nteq,ipiv,bc,nteq,info)
421 write(*,*)
'*ERROR in initialnet: singular matrix' 429 if(network.gt.2)
then 432 if(nactdog(2,node).eq.0)
then 434 & *datan(v(2,node))/constant
438 & *datan(bc(nactdog(2,node)))/constant
445 if(network.ne.4)
then 448 if(nactdog(0,node).ne.0) v(0,node)=bc(nactdog(0,node))
458 if(lakon(i)(2:5).ne.
'REBR') cycle
461 nelem1=nint(prop(index+2))
466 nelem2=nint(prop(index+3))
471 if(node11.eq.node12)
then 474 elseif(node11.eq.node22)
then 477 elseif(node21.eq.node12)
then 480 elseif(node21.eq.node22)
then 485 if(lakon(i)(6:6).eq.
'S')
then 489 if(v(2,node1).ge.v(2,node2))
then 490 v(2,node2)=v(2,node1)
492 v(2,node1)=v(2,node2)
494 elseif(lakon(i)(6:6).eq.
'J')
then 498 if(v(2,node1).ge.v(2,node2))
then 499 v(2,node1)=v(2,node2)
501 v(2,node2)=v(2,node1)
511 if((network.le.2).and.(iin_abs.eq.0))
then 514 if((lakon(nelem)(2:3).eq.
'LP').or.
515 & (lakon(nelem)(2:3).eq.
'LI')) cycle
520 call nident(itg,node1,ntg,id1)
524 call nident(itg,node2,ntg,id2)
546 if((node1.eq.0).or.(node2.eq.0)) cycle
551 if((nactdog(1,nodem).eq.0).and.(nactdog(3,nodem).eq.0))
556 if(lakon(nelem)(2:3).eq.
'LI')
then 566 if(ibody(1,j).eq.2)
then 567 g(1)=g(1)+xbodyact(1,j)*xbodyact(2,j)
568 g(2)=g(2)+xbodyact(1,j)*xbodyact(3,j)
569 g(3)=g(3)+xbodyact(1,j)*xbodyact(4,j)
570 z1=-g(1)*co(1,node1)-g(2)*co(2,node1)
572 z2=-g(1)*co(1,node2)-g(2)*co(2,node2)
576 index=ipobody(2,index)
580 if(.not.gravity)
then 582 &
'*ERROR in initialnet: no gravity vector' 584 &
' was defined for liquid element',nelem
597 if((lakon(nelem)(2:3).ne.
'LP').and.
598 & (lakon(nelem)(2:3).ne.
'LI'))
then 599 gastemp=(tg1+tg2)/2.d0
611 & r,dvi,rhcon,nrhcon,rho)
617 if(((lakon(nelem)(2:3).ne.
'LI').and.
618 & (v(2,node1).eq.v(2,node2))).or.
620 & ((lakon(nelem)(2:3).eq.
'LI').and.
621 & (v(2,node1)+
z1.eq.v(2,node2)+z2)))
then 626 if((nactdog(2,node1).eq.0)
627 & .and.(nactdog(2,node2).eq.0))
then 628 WRITE(*,*)
'**************************************' 629 write(*,*)
'*ERROR: in subroutine initialnet.f' 630 write(*,*)
' no pressure gradient' 631 write(*,*)
' in element', nelem
632 write(*,*)
' Inlet and outlet pressures are ' 633 write(*,*)
' boundary conditions ' 634 write(*,*)
' node1',node1,
' pressure',
636 write(*,*)
' node2',node2,
' pressure',
642 else if((nactdog(2,node1).ne.0)
643 & .and.(nactdog(2,node2).eq.0))
then 644 WRITE(*,*)
'**************************************' 645 write(*,*)
'*WARNING: in subroutine initialnet.f' 646 write(*,*)
' no pressure gradient' 647 write(*,*)
' in element', nelem
649 &
' Inlet pressure initial condition ' 650 write(*,*)
' is changed ' 651 write(*,*)
' node1',node1,
652 &
' given initial pressure',v(2,node1)
653 v(2,node1)=1.1*v(2,node1)
654 write(*,*)
' node1',node1,
655 &
' new initial pressure',v(2,node1)
656 write(*,*)
' node2',node2,
' pressure',
661 else if((nactdog(2,node1).eq.0)
662 & .and.(nactdog(2,node2).ne.0))
then 663 WRITE(*,*)
'**************************************' 664 write(*,*)
'*WARNING: in subroutine initialnet.f' 665 write(*,*)
' no pressure gradient' 666 write(*,*)
' in element', nelem
668 &
' Outlet pressure initial condition ' 669 write(*,*)
' is changed ' 670 write(*,*)
' node1',node1,
' pressure' 672 write(*,*)
' node2',node2,
673 &
'given intial pressure',
675 v(2,node2)=0.9*v(2,node2)
676 write(*,*)
' node2',node2,
677 &
' new initial pressure',v(2,node2)
681 else if((nactdog(2,node1).ne.0)
682 & .and.(nactdog(2,node2).ne.0))
then 683 WRITE(*,*)
'**************************************' 684 write(*,*)
'*WARNING: in subroutine initialnet.f' 685 write(*,*)
' no pressure gradient' 686 write(*,*)
' in element', nelem
687 write(*,*)
' Inlet and outlet pressure ' 688 write(*,*)
' initial condition are changed ' 689 write(*,*)
' node1',node1,
690 &
' given initial pressure',v(2,node1)
691 v(2,node1)=1.05*v(2,node2)
692 write(*,*)
' node1',node1,
693 &
' new intial pressure',v(2,node1)
694 write(*,*)
' node2',node2,
695 &
' given initial pressure',v(2,node2)
696 v(2,node2)=0.95*v(2,node2)
697 write(*,*)
' node2',node2,
698 &
' new intial pressure',v(2,node2)
705 if((nactdog(1,nodem).ne.0).and.(v(1,nodem).eq.0.d0))
then 706 call flux(node1,node2,nodem,nelem,lakon,kon,ipkon,
707 & nactdog,identity,ielprop,prop,kflag,v,xflow,f,
708 & nodef,idirf,
df,cp,r,rho,physcon,g,co,dvi,numf,
709 & vold,set,shcon,nshcon,rhcon,nrhcon,ntmat_,mi,ider,
714 if((lakon(nelem)(2:4).ne.
'LIP').and.
715 & (lakon(nelem)(2:3).ne.
'VO').and.
716 & (lakon(nelem)(2:4).ne.
'ATR').and.
717 & (lakon(nelem)(2:4).ne.
'RTA'))
then 718 if(v(1,nodem).eq.0d0)
then 719 WRITE(*,*)
'**************************************' 720 write(*,*)
'*ERROR: in subroutine initialnet.f' 721 write(*,*)
' in element', nelem,
723 write(*,*)
' mass flow rate value = 0 !' 724 write(*,*)
' node1',node1,
' pressure',
726 write(*,*)
' node2',node2,
' pressure',
730 if (v(1,nodem)*(v(2,node1)-v(2,node2)).lt.0)
then 731 WRITE(*,*)
'**************************************' 732 write(*,*)
'*WARNING: in subroutine initialnet.f' 733 write(*,*)
' in element', nelem
735 &
' initial mass flow rate value does not' 736 write(*,*)
' correspond to pressure gradient' 737 write(*,*)
' node1',node1,
'pressure',
739 write(*,*)
' node2',node2,
'pressure',
741 write(*,*)
' nodem',nodem,
'mass flow',
744 &
' the sign of the initial mass flow' 745 write(*,*)
' rate will be changed' 752 & ielmat,ntmat_,shcon,nshcon,rhcon,nrhcon,mi,iponoel,inoel,
758 if (gaspipe.and.(iin_abs.eq.0))
then 764 if(ineighe(i).gt.2)
then 766 write(*,*)
'*WARNING :in subroutine initialnet.f' 767 write(*,*)
' more than 2 elements GASPIPE' 768 write(*,*)
' or RESTRICTOR are connected ' 769 write(*,*)
' to node',itg(i),
'. The common' 771 &
' node is converted into a chamber.' 772 write(*,*)
' Total and static parameters are' 782 call nident(itg,node1,ntg,id1)
783 call nident(itg,node2,ntg,id2)
794 if((ineighe(id1).eq.1).or.
795 & (ineighe(id1).eq.2))
then 803 if((ineighe(id2).eq.1).or.
804 & (ineighe(id2).eq.2))
then 817 if(ineighe(i).gt.0)
then 821 nodem=kon(ipkon(nelem)+2)
825 & shcon,nshcon,cp,r,dvi,rhcon,nrhcon,rho)
831 if(lakon(nelem)(2:5).eq.
'GAPF')
then 833 if(lakon(nelem)(2:6).eq.
'GAPFA')
then 835 elseif(lakon(nelem)(2:6).eq.
'GAPFI')
then 839 elseif(lakon(nelem)(2:3).eq.
'RE')
then 843 if(lakon(nelem)(4:5).eq.
'EX')
then 844 if(lakon(nint(prop(index+4)))(2:6).eq.
'GAPFA')
848 & (lakon(nint(prop(index+4)))(2:6).eq.
'GAPFI')
856 if(lakon(nelem)(4:5).eq.
'BE')
then 859 elseif(lakon(nelem)(4:5).eq.
'BR')
then 860 if(lakon(nelem)(4:6).eq.
'BRJ')
then 861 if(nelem.eq.nint(prop(index+2)))
then 863 elseif(nelem.eq.nint(prop(index+3)))
then 866 elseif(lakon(nelem)(4:6).eq.
'BRS')
then 867 if(nelem.eq.nint(prop(index+2)))
then 869 elseif(nelem.eq.nint(prop(index+3)))
then 875 if(node.eq.node1)
then 877 elseif(node.eq.node2)
then 881 elseif(lakon(nelem)(2:3).eq.
'UP')
then 891 if(v(3,node).eq.0.d0)
then 892 xflow360=xflow*iaxial
893 call ts_calc(xflow360,tt,pt,kappa,r,a,ts,icase)
908 if(ineighe(i).eq.-1) v(3,itg(i))=v(0,itg(i))
static double * z1
Definition: filtermain.c:48
subroutine df(x, u, uprime, rpar, nev)
Definition: subspace.f:133
subroutine flux(node1, node2, nodem, nelem, lakon, kon, ipkon, nactdog, identity, ielprop, prop, kflag, v, xflow, f, nodef, idirf, df, cp, R, rho, physcon, g, co, dvi, numf, vold, set, shcon, nshcon, rhcon, nrhcon, ntmat_, mi, ider, ttime, time, iaxial)
Definition: flux.f:24
subroutine preinitialnet(ieg, lakon, v, ipkon, kon, nflow, prop, ielprop, ielmat, ntmat_, shcon, nshcon, rhcon, nrhcon, mi, iponoel, inoel, itg, ntg)
Definition: preinitialnet.f:22
subroutine ts_calc(xflow, Tt, Pt, kappa, r, A, Ts, icase)
Definition: ts_calc.f:20
subroutine dgesv(N, NRHS, A, LDA, IPIV, B, LDB, INFO)
Definition: dgesv.f:58
subroutine postinitialnet(ieg, lakon, v, ipkon, kon, nflow, prop, ielprop, ielmat, ntmat_, shcon, nshcon, rhcon, nrhcon, mi, iponoel, inoel, itg, ntg)
Definition: postinitialnet.f:22
subroutine nident(x, px, n, id)
Definition: nident.f:26
subroutine materialdata_tg(imat, ntmat_, t1l, shcon, nshcon, sph, r, dvi, rhcon, nrhcon, rho)
Definition: materialdata_tg.f:20