客户端代码如下:
import java.io.DataOutputStreamimport java.io.File
import java.io.FileInputStream
import java.io.IOException
import java.net.InetSocketAddress
import java.net.Socket
/**
* 文件发送客户端主程序
* @author admin_Hzw
*
*/
public class BxClient {
/**
* 程序main方法
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
int length = 0
double sumL = 0
byte[] sendBytes = null
Socket socket = null
DataOutputStream dos = null
FileInputStream fis = null
boolean bool = false
try {
File file = new File("D:/天啊.zip") //要传输的文件路径
long l = file.length()
socket = new Socket()
socket.connect(new InetSocketAddress("127.0.0.1", 48123))
dos = new DataOutputStream(socket.getOutputStream())
fis = new FileInputStream(file)
sendBytes = new byte[1024]
while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {
sumL += length
System.out.println("已传输:"+((sumL/l)*100)+"%")
dos.write(sendBytes, 0, length)
dos.flush()
}
//虽然数据类型不同,但JAVA会自动转换成相同数据类型后在做比较
if(sumL==l){
bool = true
}
}catch (Exception e) {
System.out.println("客户端文件传输异常")
bool = false
e.printStackTrace()
} finally{
if (dos != null)
dos.close()
if (fis != null)
fis.close()
if (socket != null)
socket.close()
}
System.out.println(bool?"成功":"失败")
}
}
服务端代码如下:
import java.io.DataInputStreamimport java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.net.ServerSocket
import java.net.Socket
import java.util.Random
import com.boxun.util.GetDate
/**
* 接收文件服务
* @author admin_Hzw
*
*/
public class BxServerSocket {
/**
* 工程main方法
* @param args
*/
public static void main(String[] args) {
try {
final ServerSocket server = new ServerSocket(48123)
Thread th = new Thread(new Runnable() {
public void run() {
while (true) {
try {
System.out.println("开始监听...")
/*
* 如果没有访问它会自动等待
*/
Socket socket = server.accept()
System.out.println("有链接")
receiveFile(socket)
} catch (Exception e) {
System.out.println("服务器异常")
e.printStackTrace()
}
}
}
})
th.run() //启动线程运行
} catch (Exception e) {
e.printStackTrace()
}
}
public void run() {
}
/**
* 接收文件方法
* @param socket
* @throws IOException
*/
public static void receiveFile(Socket socket) throws IOException {
byte[] inputByte = null
int length = 0
DataInputStream dis = null
FileOutputStream fos = null
String filePath = "D:/temp/"+GetDate.getDate()+"SJ"+new Random().nextInt(10000)+".zip"
try {
try {
dis = new DataInputStream(socket.getInputStream())
File f = new File("D:/temp")
if(!f.exists()){
f.mkdir()
}
/*
* 文件存储位置
*/
fos = new FileOutputStream(new File(filePath))
inputByte = new byte[1024]
System.out.println("开始接收数据...")
while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {
fos.write(inputByte, 0, length)
fos.flush()
}
System.out.println("完成接收:"+filePath)
} finally {
if (fos != null)
fos.close()
if (dis != null)
dis.close()
if (socket != null)
socket.close()
}
} catch (Exception e) {
e.printStackTrace()
}
}
}
1.程序功能
程序FLDCRY可根据用户提供的火成岩中共存的两种长石的总成分(xAn,XAb,xor),按照物质平衡原理和Fuhrman和Lindsley等(1988)的三元长石的活度/成分模型,计算在平衡结晶作用条件下,共存的两种长石的成分、含量和平衡温度。由此,可改进Rittmann(1973)在火山岩稳定矿物组合计算中采用长石的诺模图来确定共存的两种长石的成分和含量的方法。计算结果可用于对火成岩的定量化学分类和岩石成因解释(马鸿文等,1997)。
2.方法原理
本程序设计原理为,首先根据用户提供的火成岩中共存的两种长石的总成分(XAn,XAb,xor),近似给出两种长石的初始成分;然后,根据物质平衡原理,采用最小二乘法,计算出两种长石的含量。继而根据两种长石的成分,采用Fuhrman和Lindsley(1988)的三元长石活度/成分模型,计算两种长石中各端员组分的活度是否相等。若不相等,则分别采用Fuhrman和Lindsley(1988)、Kroll等(1993)的算法,调整两种长石中各端员组分的含量(xAn,xAb,xor)。整个计算过程采用迭代法,直至计算出的各端员组分活度(aAn,aAb,aor)在两种长石中相等,同时求解出两种长石的含量和平衡温度。
3.程序结构
结晶岩热力学软件
4.使用说明
(1)输入格式
程序运行过程中,按照屏幕提示,依次提供以下参数:
OFN 输出文件名
Sample 样品号
PGPa 估计的压力(GPa)
XAn,XAb,XOr 岩石中共存的两种长石的总成分
程序每次运行可设定不同的压力,对不同的样品进行循环计算。
(2)输出格式
全部计算结果输出到文件OFN中。内容包括:样品号,估计的压力(GPa),以及迭代计算结果,即两种长石的总成分,斜长石和碱性长石的成分和含量,采用Fuhrman和Lindsley(1988)的算法调整的两种长石中各端员组分的含量和平衡温度,采用Kroll等(1993)的算法调整的两种长石中各端员组分的含量和平衡温度等。
每次迭代计算的结果均按相同格式输出。
5.程序文本
结晶岩热力学软件
结晶岩热力学软件
结晶岩热力学软件
do i=1,nm
do j=1,m
A2(i,j)=Al(j,i)
end do
end do**** A2 is transpose of A1,rank(nm,m),multiply Al by A2 **************
do i=1,nm
do j=1,nm
A(i,j)=0
do k=1,m
A(i,j)=A(i,j)+A2(i,k)*A1(k,j)
end do
end do
end do**** A(nm,nm)matrix inversion by the Gauss-Jordan method ***************
D=1.0
do j=1,nm
11(j)=0
end do
do i=1,nm**** search for the p i vot e l ement ***************************************
AB=0
do j=1,nm
if((I1(j)-1).eq.0)goto 75
do k=1,nm
if((I1(k)-1).eq.0)goto 70
if((I1(k)-1).gt.0)goto 86
if((abs(AB)-abs(A(j,k))).gt.0)goto 70
13=j
I2=k
AB=A(j,k)
70 end do
75 end do
I1(I2)=I1(I2)+1**** interchange rows to put the pivot element on the diagonal **********
if((I3-I2).eq.0)goto 80
D=-D
do L=1,nm
Sl=A(I3,L)
结晶岩热力学软件
结晶岩热力学软件
结晶岩热力学软件
结晶岩热力学软件
结晶岩热力学软件
结晶岩热力学软件
结晶岩热力学软件
$ wAnOr,wOrAbAn,TAn,TAb,TOr,SUM,XAnpl,XAbpl,XOrpl,XCnpl,XAnal,
$ XAbal,XOral,XCnal,XAnp,XAbp,XOrp,XCnp,XAna,XAba,XOra,XCna)
data R/8.31441/
CAn=R*(alog(XAnpl*(1+XAnpl+XCnpl)*(1+XAnpl+XCnpl)/4)
$ -alog(XAnal*(1+XAnal+XCnal)*(1+XAnal+XCnal)/4))
$ +wsAbOr*(XOral*XAbal*(0.5-XAnal-2*XOral)
$ -wsAbOr*(XOrpl*XAbpl*(0.5-XAnpl-2*XOrpl))
$ +wsOrAb*(XAbal*XOral*(0.5-XAnal-2*XAbal))
$ -wsOrAb*(XAbpl*XOrpl*(0.5-XAnpl-2*XAbpl))
AA=wOrAb*(XAbal*XOral*(0.5-XAnal-2*XAbal))
$ -wOrAb*(XAbpl*XOrpl*(0.5-XAnpl-2*XAbpl))
$ +wAbOr*(XOral*XAbal*(0.5-XAnal-2*XOral))
$ -wAbOr*(XOrpl*XAbpl*(0.5-XAnpl-2*XOrpl))
$ +wAbAn*(2*XAbal*XAnal*(1-XAnal)+XAbal*XOral*(0.5-XAnal))
$ -wAbAn*(2*XAbpl*XAnpl*(1-XAnpl)+XAbpl*XOrpl*(0.5-XAnpl))
$ +wAnAb*(XAbal*XAbal*(1-2*XAnal)+XAbal*XOral*(0.5-XAnal))
$ -wAnAb*(XAbpl*XAbpl*(1-2*XAnpl)+XAbpl*XOrpl*(0.5-XAnpl))
$ -wOrAn*((2*XOrpl*XAnpl*(1-XAnpl)+XOrpl*XAbpl*(0.5-XAnpl))
$ -(2*XOral*XAnal*(1-XAnal)+XOral*XAbal*(0.5-XAnal)))
$ -wAnOr*(((1-2*XAnpl)*XOrpl**2+XOrpl*XAbpl*(0.5-XAnpl))
$ -((1-2*XAnal)*XOral**2+XOral*XAbal*(0.5-XAnal)))
$ -wOrAbAn*(XOrpl*XAbpl*(1-2*XAnpl)-XOral*XAbal*(1-2*XAnal))
TTAn=AA/CAn-273.15
CAb=R*(alog(XAbpl*(1+XAnpl+XCnpl)*(XAbpl+XOrpl))
$ -alog(XAbal*(1+XAnal+XCnal)*(XAbal+XOral)))
$ +wsAbOr*(XOral**2*(1-2*XAbal)+XOral*XAnal*(0.5-XAbal))
$ -wsAbOr*(XOrpl**2*(1-2*XAbpl)+XOrpl*XAnpl*(0.5-XAbpl))
$ +wsOrAb*(2*XOral*XAbal*(1-XAbal)+XAnal*XOral*(0.5-XAbal))
$ -wsOrAb*(2*XOrpl*XAbpl*(1-XAbpl)+XAnpl*XOrpl*(0.5-XAbpl))
BB=wOrAb*(2*XOral*XAbal*(1-XAbal)+XAnal*XOral*(0.5-XAbal))
$ -wOrAb*(2*XOrpl*XAbpl*(1-XAbpl)+XAnpl*XOrpl*(0.5-XAbpl))
$ +wAbOr*(XOral**2*(1-2*XAbal)+XOral*XAnal*(0.5-XAbal))
$ -wAbOr*(XOrpl**2*(1-2*XAbpl)+XOrpl*XAnpl*(0.5-XAbpl))
$ +wAbAn*(XAnal**2*(1-2*XAbal)+XOral*XAnal*(0.5-XAbal))
$ -wAbAn*(XAnpl**2*(1-2*XAbpl)+XOrpl*XAnpl*(0.5-XAbpl))
$ -wOrAn*(XAnpl*XOrpl*(0.5-XAbpl-2*XAnpl)
$ -XAnal*XOral*(0.5-XAbal-2*XAnal))
$ -wAnOr*(XOrpl*XAnpl*(0.5-XAbpl-2*XOrpl)
$ -XOral*XAnal*(0.5-XAbal-2*XOral))
$ -wOrAbAn*(XAnpl*XOrpl*(1-2*XAbpl)-XOral*XAnal*(1-2*XAbal))
$ +wAnAb*(2*XAbal*XAnal*(1-XAbal)+XOral*XAnal*(0.5-XAbal))
$ -wAnAb*(2*XAbpl*XAnpl*(1-XAbpl)+XOrpl*XAnpl*(0.5-XAbpl))
TTAb=BB/CAb-273.15
COr=R*(alog(XOrpl*(1+XAnpl+XCnpl)*(XAbpl+XOrpl))
$ -alog(XOral*(1+XAnal+XCnal)*(XAbal+XOral)))
$ +wsAbOr*(2*XAbal*XOral*(1-XOral)+XAbal*XAnal*(0.5-XOral))
$ -wsAbOr*(2*XAbpl*XOrpl*(1-XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))
$ +wsOrAb*(XAbal**2*(1-2*XOral)+XAbal*XAnal*(0.5-XOral))
$ -wsOrAb*(XAbpl**2*(1-2*XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))
CC=wOrAb*(XAbal**2*(1-2*XOral)+XAbal*XAnal*(0.5-XOral)
$ -wOrAb*(XAbpl**2*(1-2*XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))
$ +wAbOr*(2*XAbal*XOral*(1-XOral)+XAbal*XAnal*(0.5-XOral))
$ -wAbOr*(2*XAbpl*XOrpl*(1-XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))
$ +wAbAn*(XAbal*XAnal*(0.5-XOral-2*XAnal))
$ -wAbAn*(XAbpl*XAnpl*(0.5-XOrpl-2*XAnpl))
$ +wAnAb*(XAbal*XAnal*(0.5-XOral-2*XAbal))
$ -wOrAn*((XAnpl**2*(1-2*XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))
$ -(XAnal**2*(1-2*XOral)+XAbal*XAnal*(0.5-XOral)))
$ -wAnOr*((2*XAnpl*XOrpl*(1-XOrpl)+XAbpl*XAnpl*(0.5-XOrpl))
$ -(2*XAnal*XOral*(1-XOral)+XAbal*XAnal*(0.5-XOral)))
$ -wOrAbAn*(XAbpl*XAnpl*(1-2*XOrpl)-XAbal*XAnal*(1-2*XOral))
$ -wAnAb*(XAbpl*XAnpl*(0.5-XOrpl-2*XAbpl))
TTOr=CC/COr-273.15
SUMl=abs(abs(TTAn)-abs(TTAb))+abs(abs(TTAn)-abs(TTOr))
$ +abs(abs(TTAb)-abs(TTOr))
if(SUMl.lt.SUM)then
SUM=SUMl
XAnp=XAnpl
XAbp=XAbpl
XOrp=XOrpl
XCnp=XCnpl
XAna=XAnal
XAba=XAbal
XOra=XOral
XCna=XCnal
TAn=TTAn
TAb=TTAb
TOr=TTOr
结晶岩热力学软件
结晶岩热力学软件
6.计算实例
北京地区八达岭花岗杂岩体,对臼峪花岗岩(白志民等,1991)中二长石的成分、含量和平衡温度计算。采用最小二乘法,由全岩化学成分和各矿物化学成分计算,求得两种长石的总成分为:XAn0.083,XAb0.382,xor0.222,相当于XAn0.121,XAb0.556,xor0.323。假定岩体固结压力为0.3GPa。经过5次迭代,计算结果见下表。
输出文件:exam56.dat
结晶岩热力学软件
结晶岩热力学软件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)