c**************************************************************************** c Version: 0.3 c Last changed: Mario Monteiro, 2005-11 c These set of subroutines uses the data from the following inputs: c GONG, OSC c to write the FGONG (ascii) output file. c**************************************************************************** subroutine gong_fgong (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 FGONG output: do 10 i=1,4 aheaderout(i)=aheaderin(i) 10 continue c ndimout(1)=ndimin(3) ndimout(2)=15 ndimout(3)=30 ndimout(4)=300 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)=xdata1in(5) xdataout(8)=0.0d0 xdataout(9)=xdata1in(14) xdataout(10)=0.0d0 xdataout(11)=xdata2in(13)*xdataout(2)**2/xdata2in(6) xdataout(12)=xdata2in(14)*xdataout(2)**2/xdata2in(10) xdataout(13)=xdata1in(22) c This is non-standard: X_c xdataout(14)=xdata2in(8) xdataout(15)=0.0d0 c do 40 i=1,ndimout(1) xout(1,i)=exp(cl10*xin(2,i))*1.0d11 xout(2,i)=cl10*xin(1,i) xout(3,i)=xin(8,i) xout(4,i)=xin(9,i) xout(5,i)=xin(10,i) xout(6,i)=xin(6,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) xout(16,i)=xin(20,i) xout(17,i)=1.0d0-xin(6,i)-xin(21,i) xout(18,i)=xdataout(2)-xout(1,i) xout(19,i)=xin(29,i) xout(20,i)=0.0d0 xout(21,i)=xin(7,i) if (nparin(5).eq.1) then xout(22,i)=0.0d0 xout(23,i)=0.0d0 xout(24,i)=xin(22,i) xout(25,i)=xin(23,i) else if (nparin(5).eq.2.or.nparin(5).eq.4) then xout(22,i)=xin(22,i) xout(23,i)=xin(23,i) xout(24,i)=xin(24,i) xout(25,i)=xin(25,i) else if (nparin(5).eq.3) then xout(22,i)=xin(22,i) xout(23,i)=xin(23,i) xout(24,i)=xin(24,i) xout(25,i)=0.0d0 else do 20 j=22,25 xout(j,i)=0.0d0 20 continue endif xout(26,i)=-1.0 xout(27,i)=-1.0 xout(28,i)=-1.0 c These are non-standard: nabla & nabla_rad xout(37,i)=xin(27,i)+xin(15,i) xout(38,i)=xin(26,i)+xin(15,i) 40 continue c call write_fgong (afileout,xout,ndimout,xdataout,aheaderout) c return end c*************************************************************************** subroutine osc_fgong (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 OSC input into the FGONG output: do 10 i=1,4 aheaderout(i)=aheaderin(i) 10 continue c ndimout(1)=ndimin(1) ndimout(2)=15 ndimout(3)=40 ndimout(4)=300 c do 20 i=1,6 xdataout(i)=xdatain(i) 20 continue do 30 i=7,10 xdataout(i)=0.0d0 30 continue xdataout(11)=xdatain(9) xdataout(12)=xdatain(10) xdataout(13)=xdatain(11)*1.0d9 c These are non-standard: X_cz & Y_cz xdataout(14)=xdataout(7) xdataout(15)=xdataout(8) c do 40 i=1,ndimout(1) do 50 j=1,5 xout(j,i)=xin(j,i) 50 continue do 60 j=7,15 xout(j,i)=xin(j,i) 60 continue xout(16,i)=0.0d0 xout(17,i)=1.0d0-xin(22+1,i)-xin(22+2,i)-xin(22+3,i) xout(18,i)=xdataout(2)-xin(1,i) xout(19,i)=0.0d0 xout(20,i)=0.0d0 if (ndimin(4).eq.6) then xout(6,i)=xin(23,i) xout(21,i)=xin(24,i) xout(22,i)=xin(25,i) xout(23,i)=xin(26,i) xout(24,i)=xin(27,i) xout(25,i)=xin(28,i) xout(29,i)=0.0d0 xout(30,i)=0.0d0 xout(31,i)=0.0d0 xout(32,i)=0.0d0 xout(33,i)=0.0d0 xout(34,i)=0.0d0 xout(35,i)=0.0d0 xout(36,i)=0.0d0 else if (ndimin(4).eq.10) then xout(6,i)=xin(23,i) xout(21,i)=xin(24,i) xout(22,i)=xin(26,i) xout(23,i)=xin(27,i) xout(24,i)=xin(28,i) xout(25,i)=xin(30,i) xout(29,i)=0.0d0 xout(30,i)=xin(35,i) xout(31,i)=0.0d0 xout(32,i)=0.0d0 xout(33,i)=xin(29,i) xout(34,i)=xin(31,i) xout(35,i)=0.0d0 xout(36,i)=0.0d0 else if (ndimin(4).eq.14) then xout(6,i)=xin(23,i)+xin(24,i) xout(21,i)=xin(25,i) xout(22,i)=xin(29,i) xout(23,i)=xin(30,i) xout(24,i)=xin(31,i) xout(25,i)=xin(33,i) xout(29,i)=xin(24,i) xout(30,i)=xin(26,i) xout(31,i)=xin(27,i) xout(32,i)=xin(28,i) xout(33,i)=xin(32,i) xout(34,i)=xin(34,i) xout(35,i)=0.0d0 xout(36,i)=0.0d0 else write (*,*) 'ERROR: Unavailbale conversion of abundances' endif xout(26,i)=0.0d0 xout(27,i)=0.0d0 xout(28,i)=0.0d0 c These are non-standard: nabla & nabla_rad xout(37,i)=xin(6,i) xout(38,i)=xin(22,i) 40 continue c call write_fgong (afileout,xout,ndimout,xdataout,aheaderout) c return end c*************************************************************************** subroutine srox_fgong (afilein,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 afilein*80,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 common /datasun/sm,sr,sl common /dataphy/cg,csig,cmu c c------- Translation of the STAROX input into the FGONG output: aheaderout(1)='File converted from the output from Starox' aheaderout(2)=afilein c ndimout(1)=ndimin(1) ndimout(2)=15 ndimout(3)=30 ndimout(4)=300 c icentre=1 if (xin(1,1).gt.xin(1,ndimin(1))) icentre=ndimin(1) c xdataout(1)=xdatain(3) xdataout(2)=xdatain(2) xdataout(3)=xdatain(9)*sl xdataout(4)=xdatain(8) xdataout(5)=xdatain(7) xdataout(6)=xdatain(14) xdataout(7)=0.0d0 xdataout(8)=0.0d0 xdataout(9)=0.0d0 xdataout(10)=0.0d0 xdataout(11)=xdatain(5)*xin(5,icentre) xdataout(12)=xdatain(4) xdataout(13)=xdatain(11) c These are non-standard: X_c & Teff xdataout(14)=xdataout(6) xdataout(15)=xdataout(10) c fac1=cg*xdataout(1)/xdataout(2) do 40 i=1,ndimout(1) if (xin(1,i).eq.0.0d0) then xout(2,i)=-38.0d0 xout(15,i)=0.0d0 else xout(2,i)=log(xin(2,i)) dlpdlr=-fac1*xin(2,i)*xin(4,i)/(xin(3,i)*xin(1,i)) xout(15,i)=dlpdlr*xin(6,i) endif xout(1,i)=xin(1,i)*xdatain(2) xout(3,i)=xin(9,i) xout(4,i)=xin(3,i) xout(5,i)=xin(4,i) xout(6,i)=xin(17,i) xout(7,i)=xin(8,i) xout(8,i)=xin(15,i) xout(9,i)=xin(16,i) xout(10,i)=xin(5,i) xout(11,i)=xin(10,i) xout(12,i)=xin(14,i) xout(13,i)=xin(13,i) xout(14,i)=0.0d0 xout(16,i)=0.0d0 xout(17,i)=1.0d0-xin(17,i)-xin(18,i)-xin(19,i) xout(18,i)=xdataout(2)-xin(1,i) xout(19,i)=0.0d0 xout(20,i)=0.0d0 xout(21,i)=xin(18,i) xout(22,i)=xin(20,i) xout(23,i)=xin(21,i) xout(24,i)=xin(22,i) xout(25,i)=xin(24,i) xout(26,i)=0.0d0 xout(27,i)=0.0d0 xout(28,i)=0.0d0 xout(29,i)=0.0d0 xout(30,i)=xin(19,i) xout(31,i)=0.0d0 xout(32,i)=0.0d0 xout(33,i)=xin(23,i) xout(34,i)=xin(25,i) xout(35,i)=0.0d0 xout(36,i)=0.0d0 c These are non-standard: nabla & nabla_rad xout(37,i)=xin(6,i) xout(38,i)=xin(22,i) 40 continue c call write_fgong (afileout,xout,ndimout,xdataout,aheaderout) c return end c*************************************************************************** subroutine write_fgong (afileout,xout,ndimout,xdataout,aheaderout) 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 c------- Writing out the FGONG file: write (*,1000) ndimout(1),afileout 1000 format (' Writing FGONG model with ',i4, * ' mesh points, in file: ',a20,/) c open (2,file=afileout,form='formatted',status='unknown') c do 10 i=1,4 write (2,1010) aheaderout(i) 10 continue 1010 format (a78) write (2,1020) (ndimout(i),i=1,4) 1020 format (4i10) write (2,1030) (xdataout(i),i=1,ndimout(2)) 1030 format (1p5e16.9) write (2,1030) ((xout(j,i),j=1,ndimout(3)),i=1,ndimout(1)) c close (2) c return end c**************************************************************************