APSIM 模型模拟:读取土壤数据并运行模型

该代码展示了如何使用 R 语言读取土壤数据,设置 APSIM 模型运行参数,并运行模型以模拟小麦生长。代码涵盖了土壤参数设置、模型运行、结果输出等步骤,并提供详细注释以方便理解。

1. 读取土壤数据并存储为数据框

library(data.table)

# 定义读取 APSIM 输出文件的函数
read_APSIM_output <- function(file) {
  # 读取 APSIM 输出文件
  output <- read.table(file, header = TRUE, sep = ",")
  # 将输出文件的列名处理为合适的格式
  colnames(output) <- gsub("\\.", "_", colnames(output))
  # 返回数据框
  return(output)
}

# 读取 csv 文件,将土壤信息存储为一个数据框

soil_df <- read.csv('E:/weidan/SOIL.csv')

2. 安装和加载 APSIM R 包,设置模型运行参数

#install.packages("APSIM")
#library(APSIM)

# 读取 APSIM 文件
apsim <- readLines('E:/weidan/region1wheat/quyu1xiaomai.apsim', warn = FALSE)

# 模型运行参数
sim_parameters <- list(
  simulation_name = "my_simulation",
  override_met = TRUE, # 是否使用默认气象数据
  datapath = ".", # 数据文件夹路径
  soilpath = ".", # 土壤文件夹路径
  version = "7413.3", # APSIM 版本号
  start_date = as.Date("1990-01-01"),
  end_date = as.Date("2000-12-31"),
  run_type = "auto", # 运行类型(auto 或 batch)
  num_workers = 1 # 并行运行的进程数
)

3. 针对每个站点和深度,设置土壤参数,并运行 APSIM 模型

for (i in 1:nrow(soil_df)) {
  site <- soil_df$site[i]
  lat <- soil_df$lat[i]
  lon <- soil_df$lon[i]
  
  for (depth in c(5, 15, 30, 60, 100, 200)) {
    # 设置土壤参数
    soil_parameters <- list(
      Site = site,
      Latitude = lat,
      Longitude = lon,
      Depth = depth,
      LL15 = soil_df$LL15[i],
      DUL = soil_df$DUL[i],
      SAT = soil_df$SAT[i],
      BD = soil_df$BD[i]
    )
    
    # 运行 APSIM 模型
    #output <- run_APSIM(sim_parameters, soil_parameters)
    system(paste(apsim_exe, file_apsim),wait = TRUE,ignore.stdout=TRUE,show.output.on.console=FALSE)
    # 将结果保存为 CSV 文件
    
    # 需要定义一个新的 apsim 文件!
    file_apsim <- paste0('E:/weidan/region1wheat/SHIYONG.apsim') 
    
    writeLines(apsim, file_apsim)
    
    system(paste(apsim_exe, file_apsim),wait = TRUE,ignore.stdout=TRUE,show.output.on.console=FALSE)
    
    file.copy('E:/weidan/region1wheat/SHIYONG.out',paste0('E:/weidan/region1wheat/SHIYONG/',df$name[i],'.out'))
   
    
    print(i)
  }
}

4. 读取 APSIM 输出文件并保存结果

# 读取 APSIM 输出文件并保存结果
output_list <- list()
for (i in 1:nrow(soil_df)) {
  site <- soil_df$site[i]
  
  for (depth in c(5, 15, 30, 60, 100, 200)) {
    file <- paste0("E:/weidan/region1wheat/SHIYONG/", site, "_", depth, ".out")
    output <- read_APSIM_output(file)
    output$site <- site
    output$depth <- depth
    output_list[[length(output_list) + 1]] <- output
  }
}
output_df <- rbindlist(output_list, fill = TRUE)
write.csv(output_df, "E:/weidan/shiyongresult.csv", row.names = FALSE)

该代码展示了如何使用 R 语言读取土壤数据,设置 APSIM 模型运行参数,并运行模型以模拟小麦生长。代码涵盖了土壤参数设置、模型运行、结果输出等步骤,并提供详细注释以方便理解。

APSIM 模型模拟:读取土壤数据并运行模型

原文地址: https://www.cveoy.top/t/topic/nCfZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录