|
| 1 | +using ClimaComms |
| 2 | +using ClimaCore: InputOutput, Fields |
| 3 | +using Statistics |
| 4 | + |
| 5 | +# atmos rho e |
| 6 | +varname = "atmos_ρe_tot" |
| 7 | +comms_ctx = ClimaComms.SingletonCommsContext() |
| 8 | + |
| 9 | +cpu_filename = "experiments/AMIP/cpu-gpu_temporalmap/cpu_temporalmap_atmos_ρe_tot_1979-01-01T00-03-20.hdf5" |
| 10 | +cpu_hdf5reader = InputOutput.HDF5Reader(cpu_filename, comms_ctx) |
| 11 | +cpu_atmos_ρe_tot = InputOutput.read_field(cpu_hdf5reader, varname) |
| 12 | +close(cpu_hdf5reader) |
| 13 | + |
| 14 | +gpu_filename = "experiments/AMIP/cpu-gpu_temporalmap/gpu_temporalmap_atmos_ρe_tot_1979-01-01T00-03-20.hdf5" |
| 15 | +gpu_hdf5reader = InputOutput.HDF5Reader(gpu_filename, comms_ctx) |
| 16 | +gpu_atmos_ρe_tot = InputOutput.read_field(gpu_hdf5reader, varname) |
| 17 | +close(gpu_hdf5reader) |
| 18 | + |
| 19 | +cpu_atmos_ρe_tot == gpu_atmos_ρe_tot # false |
| 20 | +abs(mean(parent(cpu_atmos_ρe_tot)) - mean(parent(gpu_atmos_ρe_tot))) < eps(Float64) # false temporal map (3.64e-12), true function |
| 21 | + |
| 22 | +# atmos rho q |
| 23 | +varname = "atmos_ρq_tot" |
| 24 | +comms_ctx = ClimaComms.SingletonCommsContext() |
| 25 | + |
| 26 | +cpu_filename = "experiments/AMIP/cpu_function_atmos_ρq_tot_1979-01-01T00-03-20.hdf5" |
| 27 | +cpu_hdf5reader = InputOutput.HDF5Reader(cpu_filename, comms_ctx) |
| 28 | +cpu_atmos_ρq_tot = InputOutput.read_field(cpu_hdf5reader, varname) |
| 29 | +close(cpu_hdf5reader) |
| 30 | + |
| 31 | +gpu_filename = "experiments/AMIP/gpu_function_atmos_ρq_tot_1979-01-01T00-03-20.hdf5" |
| 32 | +gpu_hdf5reader = InputOutput.HDF5Reader(gpu_filename, comms_ctx) |
| 33 | +gpu_atmos_ρq_tot = InputOutput.read_field(gpu_hdf5reader, varname) |
| 34 | +close(gpu_hdf5reader) |
| 35 | + |
| 36 | +cpu_atmos_ρq_tot == gpu_atmos_ρq_tot # false temporal map, true function |
| 37 | +abs(mean(parent(cpu_atmos_ρq_tot)) - mean(parent(gpu_atmos_ρq_tot))) < eps(Float64) # true |
| 38 | + |
| 39 | +# land temp |
| 40 | +varname = "land_T" |
| 41 | +comms_ctx = ClimaComms.SingletonCommsContext() |
| 42 | + |
| 43 | +cpu_filename = "experiments/AMIP/cpu_function_land_T_1979-01-01T00-03-20.hdf5" |
| 44 | +cpu_hdf5reader = InputOutput.HDF5Reader(cpu_filename, comms_ctx) |
| 45 | +cpu_land_T = InputOutput.read_field(cpu_hdf5reader, varname) |
| 46 | +close(cpu_hdf5reader) |
| 47 | + |
| 48 | +gpu_filename = "experiments/AMIP/gpu_function_land_T_1979-01-01T00-03-20.hdf5" |
| 49 | +gpu_hdf5reader = InputOutput.HDF5Reader(gpu_filename, comms_ctx) |
| 50 | +gpu_land_T = InputOutput.read_field(gpu_hdf5reader, varname) |
| 51 | +close(gpu_hdf5reader) |
| 52 | + |
| 53 | +cpu_land_T == gpu_land_T # false |
| 54 | +abs(mean(parent(cpu_land_T)) - mean(parent(gpu_land_T))) < eps(Float64) # true |
| 55 | + |
| 56 | +# land water |
| 57 | +varname = "land_W" |
| 58 | +comms_ctx = ClimaComms.SingletonCommsContext() |
| 59 | + |
| 60 | +cpu_filename = "experiments/AMIP/cpu_function_land_W_1979-01-01T00-03-20.hdf5" |
| 61 | +cpu_hdf5reader = InputOutput.HDF5Reader(cpu_filename, comms_ctx) |
| 62 | +cpu_land_W = InputOutput.read_field(cpu_hdf5reader, varname) |
| 63 | +close(cpu_hdf5reader) |
| 64 | + |
| 65 | +gpu_filename = "experiments/AMIP/gpu_function_land_W_1979-01-01T00-03-20.hdf5" |
| 66 | +gpu_hdf5reader = InputOutput.HDF5Reader(gpu_filename, comms_ctx) |
| 67 | +gpu_land_W = InputOutput.read_field(gpu_hdf5reader, varname) |
| 68 | +close(gpu_hdf5reader) |
| 69 | + |
| 70 | +cpu_land_W == gpu_land_W # false |
| 71 | +abs(mean(parent(cpu_land_W)) - mean(parent(gpu_land_W))) < eps(Float64) # true |
| 72 | + |
| 73 | +# ocean temp |
| 74 | +varname = "ocean_T_sfc" |
| 75 | +comms_ctx = ClimaComms.SingletonCommsContext() |
| 76 | + |
| 77 | +cpu_filename = "experiments/AMIP/cpu_function_ocean_T_sfc_1979-01-01T00-03-20.hdf5" |
| 78 | +cpu_hdf5reader = InputOutput.HDF5Reader(cpu_filename, comms_ctx) |
| 79 | +cpu_ocean_T_sfc = InputOutput.read_field(cpu_hdf5reader, varname) |
| 80 | +close(cpu_hdf5reader) |
| 81 | + |
| 82 | +gpu_filename = "experiments/AMIP/gpu_function_ocean_T_sfc_1979-01-01T00-03-20.hdf5" |
| 83 | +gpu_hdf5reader = InputOutput.HDF5Reader(gpu_filename, comms_ctx) |
| 84 | +gpu_ocean_T_sfc = InputOutput.read_field(gpu_hdf5reader, varname) |
| 85 | +close(gpu_hdf5reader) |
| 86 | + |
| 87 | +cpu_ocean_T_sfc == gpu_ocean_T_sfc # false |
| 88 | +abs(mean(parent(cpu_ocean_T_sfc)) - mean(parent(gpu_ocean_T_sfc))) < eps(Float64) # true temporal map, false function (1.13e-13) |
0 commit comments