here is the code.
thanks a lot for your help.
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
import seaborn as sns
import arviz as az
import numpy as np
import pymc3 as pm
import os
import theano.tensor as tt
from theano.compile.ops import as_op
lon_start=-10
lon_res=0.25
lat_start=40
lat_res=0.25
level_height=500
time_res=10800 #3h
time_start_index=88
time_dur=12
time_release_interval=3600
num_lon=80
num_lat=80
num_Conc=10
m_srs_sum=np.zeros((2*num_lat,2*num_lon,num_Conc))
for i in range(num_Conc):
m_srs_sum[20][20][i]=1
Y=np.ones(num_Conc)
basic_model = pm.Model()
with basic_model:
# Priors for unknown model parameters
longitude_i = pm.DiscreteUniform("longitude_i", lower=1, upper=79)
latitude_i = pm.DiscreteUniform("latitude_i", lower=1, upper=79)
releaserate = pm.Uniform("releaserate", lower=1, upper=100,transform=None)
sigma_model=1
m_srs_model = pm.Data('m_srs_model', m_srs_sum)
lon_index=pm.theanof.intX(longitude_i)
lat_index=pm.theanof.intX(latitude_i)
grid_area = 100 * 1000 * lon_res * 100 * 1000 * lat_res
grid_volume = grid_area * level_height
matrix_temp = m_srs_model[lat_index][lon_index]
#factor=releaserate*1000*time_release_interval/3600 / grid_volume / time_res * 10 ** 9
factor=releaserate*1000/time_release_interval / grid_volume * 10 ** 9
result_ConcCal=factor*matrix_temp
Y_pre=result_ConcCal
Y_obs=pm.Normal("Y_obs", mu=Y_pre, sigma=sigma_model, observed=Y)
trace_g=pm.sample(draws=20000,tune=1000,chains=20,cores=4)