⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listnadata.~pas

📁 本代码可以较好地计算腹膜透析中合理的钠浓度
💻 ~PAS
字号:
unit ListNaData;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls,NaConcentration,AryClass;

type
  TFormNaList = class(TForm)
    ListViewNaCon: TListView;
    BtRun: TButton;
    BtViewCurve: TButton;
    ListViewSelect: TListView;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    EditGtNa: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    EditGtVol: TEdit;
    Label6: TLabel;
    BtClose: TButton;
    procedure BtRunClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormNaList: TFormNaList;
  AryNaConTime,AryGluConTime,AryNaMolTime,AryGluMolTime,AryQuTime,AryVolTime:TRealDynThrArray;
  //钠离子、葡萄糖浓度、钠离子量、葡萄糖量、超滤率(Qu)、溶剂体积量随时间变化,
  //第一维变量为起始钠离子浓度,第二维变量为起始葡萄糖浓度,第三维变量为存腹时间的变化

  AryTotalNa,AryTotalVol:TRealDynTwoArray;  //对应于每种起始Na浓度和葡萄糖浓度的Na、水的总清除量
  i,j,m,n,k: Integer;                              //数组指针

implementation

{$R *.dfm}

procedure TFormNaList.BtRunClick(Sender: TObject);
var
GluSiftPara,NaSiftPara:Real;                     //钠离子和葡萄糖的筛系数;
GluRefPara,NaRefPara:Real;                       //钠离子和葡萄糖的反射系数;
LpsRt:Real;                                      //LPS*RT的值
Qa:Real;                                         //重吸收率
GtNa,GtVol:Real;                                 //选出的允许误差范围
Item,ItemSe: TListItem;                                 // 动态item
begin
  GluSiftPara:=0.96115;
  NaSiftPara:=0.97472;
  GluRefPara:=0.025458;
  NaRefPara:=0.010978;
  LpsRt:=0.08*19.3*1000;
  Qa:=1;
  GtNa:=StrToFloat(EditGtNa.Text);
  GtVol:=StrToFloat(EditGtVol.Text);
  /////////////////////////////////////////////////////////////////////////////
  //确定透析液中各离子浓度(单位:mmol/mL)
  j:=0;
  m:=0;
  for j:=0 to (NumPDNaC-1) do
    begin
      for m:=0 to (NumPDGlusC-1) do
        begin
        AryVolTime[j,m,0]:=2000;
        AryGluConTime[j,m,0]:=AryPDSGlucoseCon[m];
        AryNaConTime[j,m,0]:=AryPDSNaCon[j];
        AryGluMolTime[j,m,0]:=AryGluConTime[j,m,0]*AryVolTime[j,m,0];
        AryNaMolTime[j,m,0]:=AryNaConTime[j,m,0]*AryVolTime[j,m,0];
        AryQuTime[j,m,0]:=LpsRt*(GluRefPara*(AryGluConTime[j,m,0]-AryBloodCon[1])+NaRefPara*(AryNaConTime[j,m,0]-AryBloodCon[0]));
        end;
    end;
  //Edit1.Text:=FloattoStr(NumPDNaC) ;

  j:=0;
  m:=0;
  i:=0;
  for j:=0 to (NumPDNaC-1) do
    begin
      for m:=0 to (NumPDGlusC-1) do
        begin
          for i:=1 to 900 do                                  //假定最长的一袋存腹时间为900min
            begin
            AryGluMolTime[j,m,i]:=AryGluMolTime[j,m,i-1]+1*(15.3/1.5*(AryBloodCon[1]-AryGluConTime[j,m,i-1])+0.50*GluSiftPara*AryQuTime[j,m,i-1]*AryBloodCon[1]-GluSiftPara*Qa*AryGluConTime[j,m,i-1]-0.3*AryGluConTime[j,m,i-1]);
            AryNaMolTime[j,m,i]:=AryNaMolTime[j,m,i-1]+1*(27.9/1.5*(AryBloodCon[0]-AryNaConTime[j,m,i-1])+0.50*NaSiftPara*AryQuTime[j,m,i-1]*AryBloodCon[0]-NaSiftPara*Qa*AryNaConTime[j,m,i-1]-0.3*AryNaConTime[j,m,i-1]);
            AryGluConTime[j,m,i]:=AryGluMolTime[j,m,i]/AryVolTime[j,m,i-1];
            AryNaConTime[j,m,i]:=AryNaMolTime[j,m,i]/AryVolTime[j,m,i-1];
            AryQuTime[j,m,i]:=LpsRt*(GluRefPara*(AryGluConTime[j,m,i]-AryBloodCon[1])+NaRefPara*(AryNaConTime[j,m,i]-AryBloodCon[0]));
            AryVolTime[j,m,i]:=AryVolTime[j,m,i-1]+1*(AryQuTime[j,m,i]-Qa-0.3);
            end;
            AryTotalNa[j,m]:=(AryNaMolTime[j,m,AryDepTime[0]]+AryNaMolTime[j,m,AryDepTime[1]]+AryNaMolTime[j,m,AryDepTime[2]]+AryNaMolTime[j,m,AryDepTime[3]]-AryNaMolTime[j,m,0]*4)*58.5/1000+AryNaOut[0]+AryNaOut[3];
            AryTotalVol[j,m]:=AryVolTime[j,m,AryDepTime[0]]+AryVolTime[j,m,AryDepTime[1]]+AryVolTime[j,m,AryDepTime[2]]+AryVolTime[j,m,AryDepTime[3]]-2000*4+AryNaOut[1];
        end;
    end;
  //Edit1.Text:=FloattoStr(AryTotalVol[31]);

  ////////////////////////////////////////////////////////////////////////////
    try
    ListViewNaCon.Items.BeginUpdate;                                      //开始更新
    ListViewSelect.Items.BeginUpdate;
     try
     ListViewNaCon.items.clear;
     ListViewSelect.items.clear;
     j:=0;
     m:=0;
     n:=0;
      for j:=0 to (NumPDNaC-1) do
        begin
          for m:=0 to (NumPDGlusC-1) do
            begin
            n:=n+1;
            Item:=ListViewNaCon.items.add;
            Item.caption:=IntToStr(n);
            Item.subitems.Add(FloatToStr(AryNaConTime[j,m,0]*1000)) ;
            Item.subitems.Add(FloatToStr(AryGluConTime[j,m,0]*1000)) ;
            Item.subitems.Add(FloatToStr(AryTotalNa[j,m])) ;
            Item.subitems.Add(FloatToStr(AryTotalVol[j,m]));
            k:=0;
              for k:=0 to (NumNaIn-1) do
                begin
                  if ((AryNaSIn[k]*(1-GtNa/100))<AryTotalNa[j,m])and(AryTotalNa[j,m]<AryNaSIn[k]*(1+GtNa/100))and(1000*(1-GtVol/100)<AryTotalVol[j,m])and(AryTotalVol[j,m]<1000*+(1+GtVol/100))
                    then begin
                    ItemSe:=ListViewSelect.items.add;
                    ItemSe.caption:=IntToStr(n);
                    ItemSe.subitems.Add(FloatToStr(AryNaConTime[j,m,0]*1000)) ;
                    ItemSe.subitems.Add(FloatToStr(AryGluConTime[j,m,0]*1000)) ;
                    ItemSe.subitems.Add(FloatToStr(AryTotalNa[j,m])) ;
                    ItemSe.subitems.Add(FloatToStr(AryTotalVol[j,m]));
                    end;
                end;
            end;
        end;
     except
     ListViewNaCon.items.Clear;
     ListViewSelect.items.Clear;
     messagedlg('运行出错',mtError,[mbok],0);
     end  ;
    finally
    ListViewNaCon.Items.EndUpdate;                     //结束更新
    ListViewSelect.Items.EndUpdate;
    end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -