Changeset 9659
- Timestamp:
- Feb 11, 2015, 11:26:16 AM (9 years ago)
- Location:
- trunk/anuga_core/anuga
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/anuga_core/anuga/parallel/parallel_internal_boundary_operator.py
r9657 r9659 100 100 self.smoothing_timescale = 0. 101 101 self.smooth_Q = 0. 102 self.smooth_delta_total_energy = 0. 102 103 # Set them based on a call to the discharge routine with smoothing_timescale=0. 103 104 # [values of self.smooth_* are required in discharge_routine, hence dummy values above] … … 106 107 # Finally, set the smoothing timescale we actually want 107 108 self.smoothing_timescale = smoothing_timescale 109 self.smooth_delta_total_energy = self.delta_total_energy 108 110 109 111 def parallel_safe(self): … … 162 164 # Determine the direction of the flow 163 165 if self.myid == self.master_proc: 164 if self.use_velocity_head: 165 self.delta_total_energy = enq_total_energy0 - enq_total_energy1 166 self.driving_energy = max(enq_total_energy0, enq_total_energy1) 167 # Compute discharge 168 Q = self.internal_boundary_function(enq_total_energy0, enq_total_energy1) 169 else: 170 self.delta_total_energy = enq_stage0 - enq_stage1 171 self.driving_energy = max(enq_stage0, enq_stage1) 172 # Compute discharge 173 Q = self.internal_boundary_function(enq_stage0, enq_stage1) 174 175 # Other variables required by anuga's structure operator are not used 166 # Variables required by anuga's structure operator which are not 167 # used 176 168 barrel_velocity = numpy.nan 177 169 outlet_culvert_depth = numpy.nan … … 179 171 case = '' 180 172 181 # Use time-smoothed discharge173 # 'Timescale' for smoothed discharge and energy 182 174 ts = self.domain.timestep/max(self.domain.timestep, self.smoothing_timescale, 1.0e-30) 175 176 # Energy or stage as head 177 if self.use_velocity_head: 178 E0 = enq_total_energy0 179 E1 = enq_total_energy1 180 else: 181 E0 = enq_stage0 182 E1 = enq_stage1 183 184 self.delta_total_energy = E0 - E1 185 self.driving_energy = max(E0, E1) 186 187 # Compute a 'smoothed' delta_total_energy for improved numerical 188 # stability 189 self.smooth_delta_total_energy = self.smooth_delta_total_energy +\ 190 ts*(self.delta_total_energy - self.smooth_delta_total_energy) 191 192 if numpy.sign(self.smooth_delta_total_energy) != numpy.sign(self.delta_total_energy): 193 self.smooth_delta_total_energy = 0. 194 195 # Compute the 'tailwater' energy from the 'headwater' energy 196 # and the smooth_delta_total_energy Note if ts = 1 (no 197 # smoothing), then the raw inlet energies are used 198 if E0 >= E1: 199 inlet0_energy = 1.0*E0 200 inlet1_energy = inlet0_energy - self.smooth_delta_total_energy 201 202 else: 203 inlet1_energy = 1.0*E1 204 inlet0_energy = inlet1_energy + self.smooth_delta_total_energy 205 206 # Compute discharge 207 Q = self.internal_boundary_function(inlet0_energy, inlet1_energy) 183 208 self.smooth_Q = self.smooth_Q + ts*(Q - self.smooth_Q) 184 209 185 210 if numpy.sign(self.smooth_Q) != numpy.sign(Q): 186 211 # The flow direction of the 'instantaneous Q' based on the -
trunk/anuga_core/anuga/shallow_water/shallow_water_domain.py
r9654 r9659 1444 1444 send(volume,0) 1445 1445 1446 barrier()1446 #barrier() 1447 1447 1448 1448 if myid == 0: … … 1483 1483 send(flux_integral,0) 1484 1484 1485 barrier()1485 #barrier() 1486 1486 1487 1487 if myid == 0: … … 1518 1518 send(flux_integral,0) 1519 1519 1520 barrier()1520 #barrier() 1521 1521 1522 1522 if myid == 0: -
trunk/anuga_core/anuga/structures/internal_boundary_operator.py
r9657 r9659 100 100 self.smoothing_timescale = 0. 101 101 self.smooth_Q = 0. 102 self.smooth_delta_total_energy = 0. 102 103 # Set them based on a call to the discharge routine with smoothing_timescale=0. 103 104 # [values of self.smooth_* are required in discharge_routine, hence dummy values above] … … 106 107 # Finally, set the smoothing timescale we actually want 107 108 self.smoothing_timescale = smoothing_timescale 108 109 self.smooth_delta_total_energy = self.delta_total_energy 110 111 ########################################################################### 109 112 def discharge_routine(self): 110 113 """Procedure to determine the inflow and outflow inlets. … … 131 134 self.inlet0_energy = self.inlets[0].get_enquiry_stage() 132 135 self.inlet1_energy = self.inlets[1].get_enquiry_stage() 133 134 # Compute discharge 135 Q = self.internal_boundary_function(self.inlet0_energy, self.inlet1_energy) 136 137 # Store these variables for anuga's structure output 138 self.driving_energy = max(self.inlet0_energy, self.inlet1_energy) 139 self.delta_total_energy = self.inlet0_energy - self.inlet1_energy 136 140 137 141 # Other variables required by anuga's structure operator are not used … … 141 145 case = '' 142 146 147 # ts is used for smoothing discharge and delta_total_energy 148 if self.domain.timestep > 0.: 149 ts = self.domain.timestep/max(self.domain.timestep, self.smoothing_timescale, 1.0e-30) 150 else: 151 ts = 1.0 152 153 # Compute a 'smoothed' delta_total_energy 154 self.smooth_delta_total_energy = self.smooth_delta_total_energy +\ 155 ts*(self.delta_total_energy - self.smooth_delta_total_energy) 156 157 if numpy.sign(self.smooth_delta_total_energy) != numpy.sign(self.delta_total_energy): 158 self.smooth_delta_total_energy = 0. 159 160 # Compute the 'tailwater' energy from the 'headwater' energy and the smooth_delta_total_energy 161 # Note if ts = 1 (no smoothing), then the raw inlet energies are used 162 if self.inlet0_energy >= self.inlet1_energy: 163 inlet0_energy = 1.0*self.inlet0_energy 164 inlet1_energy = inlet0_energy - self.smooth_delta_total_energy 165 166 # Compute discharge 167 Q = self.internal_boundary_function(inlet0_energy, inlet1_energy) 168 else: 169 inlet1_energy = 1.0*self.inlet1_energy 170 inlet0_energy = inlet1_energy + self.smooth_delta_total_energy 171 172 # Compute discharge 173 Q = self.internal_boundary_function(inlet0_energy, inlet1_energy) 174 143 175 # Use time-smoothed discharge 144 ts = self.domain.timestep/max(self.domain.timestep, self.smoothing_timescale, 1.0e-30)145 176 self.smooth_Q = self.smooth_Q + ts*(Q - self.smooth_Q) 146 177 … … 163 194 Q = min( abs(self.smooth_Q), abs(Q) ) 164 195 165 # Store these variables for anuga's structure output166 self.driving_energy = max(self.inlet0_energy, self.inlet1_energy)167 self.delta_total_energy = self.inlet0_energy - self.inlet1_energy168 169 196 return Q, barrel_velocity, outlet_culvert_depth
Note: See TracChangeset
for help on using the changeset viewer.