c**************************************************************************** c Version: 0.1 c Last changed: Mario Monteiro, 2005-02 c These set of subroutines uses the data from the following inputs: c GONG, FGONG c to writte the OSC (ascii) output file. c**************************************************************************** subroutine gong_osc (afileout,xin,ndimin,nparin, * xdata1in,xdata2in,xdata3in,aheaderin) c implicit double precision (b-h,o-y) implicit integer (i-n) parameter (npt=5000,ncol=40,ndat=200) character afileout*80,aheaderin*80,aheaderout*80 dimension aheaderin(10),aheaderout(10) dimension ndimin(ndat),xin(ncol,npt),nparin(ndat) dimension xdata1in(ndat),xdata2in(ndat),xdata3in(ndat) dimension ndimout(ndat),xout(ncol,npt),xdataout(ndat) c common /datanum/c4pi,cl10 common /dataphy/cg,csig,cmu c c------- Translation of the GONG input into the OSC output: do 10 i=1,4 aheaderout(i)=aheaderin(i) 10 continue aheaderout(5)=' 14 H1 H2 He3 He4 Li7 Be7 C12 C13 '// * 'N14 N15 O16 O17 Be9 Si28' c ndimout(1)=ndimin(3) ndimout(2)=12 ndimout(3)=22 ndimout(4)=14 ndimout(5)=-1 c xdataout(1)=xdata1in(23) xdataout(2)=xdata1in(24) xdataout(3)=xdata1in(25) xdataout(4)=xdata1in(1) xdataout(5)=xdata1in(2) xdataout(6)=xdata1in(3) xdataout(7)=0.0d0 xdataout(8)=0.0d0 xdataout(9)=xdata2in(13)*xdataout(2)**2/xdata2in(6) xdataout(10)=xdata2in(14)*xdataout(2)**2/xdata2in(10) xdataout(11)=xdata1in(22)*1.0d-9 c This is non-standard: X_c xdataout(12)=xdata2in(8) xdataout(13)=0.0d0 c do 40 i=1,ndimout(1) xout(1,i)=exp(xin(2,i)*cl10)*1.0d11 xout(2,i)=cl10*xin(1,i) xout(3,i)=exp(cl10*xin(4,i)) xout(4,i)=xin(9,i) xout(5,i)=xin(10,i) xout(6,i)=xin(27,i)+xin(15,i) xout(7,i)=xin(11,i) xout(8,i)=xin(12,i) xout(9,i)=xin(13,i) xout(10,i)=xin(14,i) xout(11,i)=xin(15,i) xout(12,i)=xin(16,i) xout(13,i)=xin(17,i) xout(14,i)=xin(19,i)*cmu xout(15,i)=xin(18,i) do 20 j=16,21 xout(j,i)=0.0d0 20 continue xout(22,i)=xin(26,i)+xin(15,i) xout(23,i)=xin(6,i) xout(24,i)=0.0d0 xout(25,i)=xin(7,i) xout(26,i)=xin(21,i)-xin(7,i) xout(27,i)=0.0d0 xout(28,i)=0.0d0 do 30 j=29,36 xout(j,i)=0.0d0 30 continue if (nparin(5).eq.1) then xout(31,i)=xin(22,i) xout(33,i)=xin(23,i) else if (nparin(5).eq.2.or.nparin(5).eq.4) then xout(29,i)=xin(22,i) xout(30,i)=xin(23,i) xout(31,i)=xin(24,i) xout(33,i)=xin(25,i) else if (nparin(5).eq.3) then xout(29,i)=xin(22,i) xout(30,i)=xin(23,i) xout(31,i)=xin(24,i) endif 40 continue c call write_osc (afileout,xout,ndimout,xdataout,aheaderout) c return end c*************************************************************************** subroutine fgong_osc (afileout,xin,ndimin,xdatain,aheaderin) c implicit double precision (b-h,o-y) implicit integer (i-n) parameter (npt=5000,ncol=40,ndat=200) character afileout*80,aheaderin*80,aheaderout*80 dimension aheaderin(10),aheaderout(10) dimension ndimin(ndat),xin(ncol,npt),xdatain(ndat) dimension ndimout(ndat),xout(ncol,npt),xdataout(ndat) c c------- Translation of the FGONG input into the OSC output: do 10 i=1,4 aheaderout(i)=aheaderin(i) 10 continue aheaderout(5)=' 6 H1 He3 C12 C13 N14 O16' c ndimout(1)=ndimin(1) ndimout(2)=12 ndimout(3)=22 ndimout(4)=6 ndimout(5)=-1 c do 20 i=1,6 xdataout(i)=xdatain(i) 20 continue icentre=1 if (xin(1,1).gt.xin(1,ndimin(1))) icentre=ndimin(1) xdataout(7)=0.0d0 xdataout(8)=0.0d0 xdataout(9)=xdatain(11) xdataout(10)=xdatain(12) xdataout(11)=xdatain(13)*1.0d-9 xdataout(12)=0.0d0 xdataout(13)=0.0d0 c do 40 i=1,ndimout(1) do 50 j=1,5 xout(j,i)=xin(j,i) 50 continue c This is non-standard: nable xout(6,i)=xin(29,i) do 60 j=7,15 xout(j,i)=xin(j,i) 60 continue do 70 j=16,21 xout(j,i)=0.0d0 70 continue c This is non-standard: nabla_rad xout(21,i)=xin(30,i) xout(23,i)=xin(6,i) xout(24,i)=xin(21,i) xout(25,i)=xin(22,i) xout(26,i)=xin(23,i) xout(27,i)=xin(24,i) xout(28,i)=xin(25,i) 40 continue c call write_osc (afileout,xout,ndimout,xdataout,aheaderout) c return end c*************************************************************************** subroutine write_osc (afileout,xout,ndimout,xdataout,aheaderout) c c Subroutine to write out the OSC file (ascii). c implicit double precision (b-h,o-y) implicit integer (i-n) parameter (npt=5000,ncol=40,ndat=200) character afileout*80,aheaderout*80 dimension aheaderout(10) dimension ndimout(ndat),xout(ncol,npt),xdataout(ndat) c write (*,1000) ndimout(1),afileout 1000 format (' Writing OSC model with ',i4, * ' mesh points, in file: ',a20,/) c open (2,file=afileout,form='formatted',status='unknown') c do 10 i=1,5 write (2,1010) aheaderout(i) 10 continue 1010 format (a80) write (2,1030) (ndimout(i),i=1,5) 1030 format (5i10) write (2,1020) (xdataout(i),i=1,ndimout(2)) 1020 format (5d19.12) do 20 i=1,ndimout(1) write (2,1020) (xout(j,i),j=1,ndimout(3)+ndimout(4)) 20 continue c close (2) c return end c**************************************************************************