def compute(self, state): super().compute(state) return self.field.assign( thermodynamics.internal_energy(state.parameters, self.rho_averaged, self.T, r_v=self.r_v, r_l=self.r_l))
def compute(self, state): theta = state.fields('theta') rho = state.fields('rho') w_v = state.fields('water_v') w_c = state.fields('water_c') pi = thermodynamics.pi(state.parameters, rho, theta) T = thermodynamics.T(state.parameters, theta, pi, r_v=w_v) return self.field.interpolate(thermodynamics.internal_energy(state.parameters, rho, T, r_v=w_v, r_l=w_c))
# Calculate hydrostatic fields saturated_hydrostatic_balance(state, theta_e, water_t) # make mean fields theta_b = Function(Vt).assign(theta0) rho_b = Function(Vr).assign(rho0) water_vb = Function(Vt).assign(water_v0) water_cb = Function(Vt).assign(water_t - water_vb) pibar = thermodynamics.pi(state.parameters, rho_b, theta_b) Tb = thermodynamics.T(state.parameters, theta_b, pibar, r_v=water_vb) Ibar = state.fields("InternalEnergybar", Vt, dump=False) Ibar.interpolate( thermodynamics.internal_energy(state.parameters, rho_b, Tb, r_v=water_vb, r_l=water_cb)) # define perturbation xc = L / 2 zc = 2000. rc = 2000. Tdash = 2.0 r = sqrt((x - xc)**2 + (z - zc)**2) theta_pert = Function(Vt).interpolate( conditional(r > rc, 0.0, Tdash * (cos(pi * r / (2.0 * rc)))**2)) # define initial theta theta0.assign(theta_b * (theta_pert / 300.0 + 1.0))