---
abstract: 'Large-scale parallel numerical simulations are essential for a wide range of engineering problems that involve complex, coupled physical processes interacting across a broad range of spatial and temporal scales. The data structures involved in such simulations (meshes, sparse matrices, etc.) are frequently represented as graphs, and these graphs must be optimally partitioned across the available computational resources in order for the underlying calculations to scale efficiently. Partitions which minimize the number of graph edges that are cut (edge-cuts) while simultaneously maintaining a balance in the amount of work (i.e. graph nodes) assigned to each processor core are desirable, and the performance of most existing partitioning software begins to degrade in this metric for partitions with more than than $O(10^3)$ processor cores. In this work, we consider a general-purpose hierarchical partitioner which takes into account the existence of multiple processor cores and shared memory in a compute node while partitioning a graph into an arbitrary number of subgraphs. We demonstrate that our algorithms significantly improve the preconditioning efficiency and overall performance of realistic numerical simulations running on up to 32,768 processor cores with nearly $10^9$ unknowns.'
author:
-
bibliography:
- 'partitioning.bib'
title: 'A general-purpose hierarchical mesh partitioning method with node balancing strategies for large-scale numerical simulations'
---

graph partitioning, parallel numerical simulation, finite element method, load balance, parallel scalability, scientific computing

Introduction
============

As the compute node density, complexity, and heterogeneity of modern supercomputers continues to advance, so too does the potential for parallel numerical simulations to tackle ever more detailed and demanding physical applications, and the need for sophisticated numerical algorithms which are tailored to the underlying hardware. The manner in which the data structures and workload of a given simulation are partitioned among the available computational resources plays a critical role in the overall parallel efficiency which can be achieved, and the need to determine an “optimal” partitioning becomes even more acute as the number of processor cores gets large.

In this work, we focus on developing a partitioning algorithm for subdividing a large-scale graph (corresponding, e.g., to the dual graph of a finite element mesh) into $np$ subgraphs of nearly equal size, while minimizing the number of edge-cuts required to do so. In this context, $np$ is the number of processor cores, the size of a processor’s subgraph is proportional to its computational workload (thus, producing equal size subgraphs is sometimes referred to as “load balancing”), and the number of edge-cuts corresponds to the amount of inter-process communication required to share information between parts of the graph. Computational workload calculations can also be generalized to include the effects of so-called “weighted” graphs. In a weighted graph, each vertex (and possibly each edge) is assigned a “weight” value according to some metric, and the corresponding workload is computed by summing the weights. The algorithm proposed in this work supports weighted graphs, but no examples are considered here.

The computation of an optimal partitioning is known to be an NP-complete problem [@andreev2006balanced], so heuristics and approximations must be employed to find acceptable partitions in a reasonable time [@feldmann2015balanced]. Interfaces between adjacent partitions result in shared degrees of freedom (DOFs) which are communicated among neighboring partitions during various parts of the simulation such as solver and preconditioner applications. Parallel scalability of solvers and preconditioners is a fundamental requirement for constructing an efficient simulation capability, and this scalability depends directly on partition quality. Poor-quality partitions can lead to workload imbalances and unnecessary communication, two major causes of parallel inefficiency.

Partitioning is an active research topic, and many approaches, including geometric [@nour1987solving], graph-based [@farhat1988simple], hierarchical [@Devine_2002], and spectral methods [@barnard1994fast] have been proposed, studied, and implemented in numerical software packages. For larger processor counts, multilevel partitioning frameworks [@karypis1998fast] have demonstrated reasonably good results. The typical multilevel method consists of three stages: coarsening, partitioning, and refinement. First, the original large-scale graph is coarsened several times to reduce the graph size. Next, the coarsest graph undergoes partitioning (typically using a spectral method or graph-based algorithm). Finally, the partition is improved during a refinement procedure, often using the local optimization algorithms of Kernighan-Lin [@kernighan1970efficient] (KL) and Fiduccia-Mattheyses [@fiduccia1982linear] (FM).

Based on the multilevel framework, several successful general-purpose serial tools for graph partitioning have been developed, including CHACO [@hendrickson1995chaco], METIS [@karypis1995metis] and Scotch [@chevalier2008pt]. Most graphs of interest in large-scale numerical simulations are too large to be partitioned on a single processor core, so distributed memory parallel graph partitioning tools have also been developed, including ParMETIS [@karypis1997parmetis] and PTScotch [@chevalier2008pt], which are based on underlying serial multilevel partitioners.

Existing serial and parallel partitioners work well for up to $O(10^3)$ processor cores, but they may be far from ideal or even fail to generate partitions for larger numbers of processor cores. Existing partitioners also frequently don’t account for the layout of the processing cores on multi-core systems by assigning neighboring partitions to cores on the same compute node, an approach that can benefit from memory locality and avoiding off-node communications entirely.

To address this shortcoming, we develop a hierarchical partitioning approach which accounts for the existence of multiple cores per compute node which is standard on modern supercomputers. A similar idea has also been discussed in our previous work [@Kong_2016; @kong2016highly; @kong2017scalable; @kong2018efficient; @kong2016parallel].

In the present study, the hierarchical partitioning approach is extended to more general cases involving an arbitrary number of submeshes, while still taking into account the number of cores per compute node and the shared memory configuration. If the partitioner is run as a preprocessing step, the proposed algorithm can use a small number of processor cores to partition a graph into a large number of subgraphs. In addition, our new algorithm ensures that the shared mesh nodes are evenly distributed among the neighboring processor cores, thereby improving load balancing and ultimately the overall parallel efficiency of the simulation. The new algorithm is referred to as the “general-purpose hierarchical mesh partitioning approach” and abbreviated herein as “Hierarch”.

The rest of this paper is organized as follows. In Section 2, the general-purpose hierarchical mesh partitioning approach is described in detail. The various node assignment strategies are described in Section 3, and numerical results with up to 32,768 processor cores are given in Section 4. The results are summarized and conclusions are drawn in Section 5.

Hierarchical mesh partitioning
==============================

To further motivate the need for optimal partitioning and the consequences of a poor partition, we first consider the simple 2D example shown in Fig. \[fig:good\_bad\_partitition\_examples\]. In this example, a mesh is distributed across 8 different processors using two different partitioning algorithms, and, upon inspection of the results, it is clear (even with the small size of the problem) that the result of the first partitioner is somewhat reasonable while the quality of the second partition is quite poor. To quantify the partition quality, the number of elements, nodes, and edge-cuts for each processor is summarized in Table \[tab:good\_bad\_examples\]. The number of the edge-cuts for the “bad” partition is clearly much larger than that for the “good” partition, and the workload, as measured by the number of nodes and elements in each partition, is much more evenly split for the “good” partition than it is for the “bad” one.

![“Good” (left) and “bad” (right) examples of partitioning onto 8 subdomains. Each color corresponds to a different subdomain.\[fig:good\_bad\_partitition\_examples\]](figures/partition_good_8.jpg "fig:"){width="0.49\linewidth"} ![“Good” (left) and “bad” (right) examples of partitioning onto 8 subdomains. Each color corresponds to a different subdomain.\[fig:good\_bad\_partitition\_examples\]](figures/partition_bad_8.jpg "fig:"){width="0.49\linewidth"}

[c c c c c c c c c c]{}\
pid &elems & nodes & edge-cuts\
0 & 12 & 20 & 7\
1 & 12 & 20 & 7\
2 & 12 & 21 & 13\
3 & 12 & 16 & 7\
4 & 13 & 14 & 13\
5 & 13 & 10 & 13\
6 & 13 & 12 & 9\
7 & 13 & 8 & 13\

[c c c c c c c c c c]{}\
pid &elems & nodes & edge-cuts\
0 & 12 & 22 & 13\
1 & 12 & 17 & 17\
2 & 13 & 18 & 30\
3 & 12 & 21 & 21\
4 & 13 & 14 & 29\
5 & 13 & 11 & 23\
6 & 12 & 15 & 24\
7 & 13 & 3 & 23\

The basic idea of hierarchical graph partitioning, which has been around for some time (see, e.g., the Zoltan [@Devine_2002] library in Trilinos), is to recursively partition a graph two or more times, possibly onto different numbers of processors each time. For example, the graph may be initially partitioned into $np_1$ subgraphs (where $np_1$ is, say, the number of compute nodes) using an existing partitioner such as ParMETIS, PTScotch, etc. Each subgraph can then be further partitioned into $np_2$ smaller subgraphs (where $np_2$ is e.g. the number of processor cores per compute node), so that the final partition has $np
= np_1 \times np_2$ partitions.

The basic idea is simple but very effective, especially when the number of processor cores is large relative to the number of compute nodes, as the likelihood of the algorithm failing increases with the number of partitions asked for in a single iteration. If the number of compute nodes is itself large, the first step of “Hierarch” can be obtained in a recursive manner. For simplicity, only the “two-level” hierarchical partitioning method is discussed in this work. Two hierarchical partitioning examples are shown in Figs. \[fig:hierarch\_2D\] and \[fig:hierarch\_3D\]. In these cases, the original meshes are initially partitioned into 2 submeshes, and then each submesh is further split into 4 smaller submeshes. In total, 8 submeshes are obtained through the hierarchical partitioning algorithm, and they can be assigned to processor cores in such a way that adjacent partitions are computed by processor cores on the same compute node.

![A 2D hierarchical partitioning example. The original mesh in the top left is partitioned into the two submeshes shown in the top right, and each sub-mesh is further partitioned into the 4 small submeshes shown in the second row.\[fig:hierarch\_2D\]](figures/explode_undisp.jpg "fig:"){width="0.49\linewidth"} ![A 2D hierarchical partitioning example. The original mesh in the top left is partitioned into the two submeshes shown in the top right, and each sub-mesh is further partitioned into the 4 small submeshes shown in the second row.\[fig:hierarch\_2D\]](figures/explode2.jpg "fig:"){width="0.49\linewidth"}\
![A 2D hierarchical partitioning example. The original mesh in the top left is partitioned into the two submeshes shown in the top right, and each sub-mesh is further partitioned into the 4 small submeshes shown in the second row.\[fig:hierarch\_2D\]](figures/explode_color_8.jpg "fig:"){width="0.49\linewidth"}

![A 3D hierarchical partitioning 3D example. As in the 2D case, the 3D mesh is partitioned into 2 submeshes at the first step, and then each submesh is subsequently split into 4 smaller submeshes.\[fig:hierarch\_3D\]](figures/cube_3D_one_domain.jpg "fig:"){width="0.49\linewidth"} ![A 3D hierarchical partitioning 3D example. As in the 2D case, the 3D mesh is partitioned into 2 submeshes at the first step, and then each submesh is subsequently split into 4 smaller submeshes.\[fig:hierarch\_3D\]](figures/cube_3D_two_domains.jpg "fig:"){width="0.49\linewidth"}\
![A 3D hierarchical partitioning 3D example. As in the 2D case, the 3D mesh is partitioned into 2 submeshes at the first step, and then each submesh is subsequently split into 4 smaller submeshes.\[fig:hierarch\_3D\]](figures/cube_3D_eight_domain.jpg "fig:"){width="0.49\linewidth"}

To fix ideas and assist in describing the algorithm, let us denote the dual graph of the mesh as $G=(\{v_i\}, \{e_j\})$, where $v_i$ is a graph vertex corresponding to a mesh element, and $e_j$ is a graph edge representing a mesh element side. The number of graph vertices $\{v_i\}$ is denoted by $nv$, and a partition is represented by an integer array $P=\{ p_i \}$, $p_i \in [0, np)$, of size $nv$. Vertices $v_i$ and $v_j$ are assigned to the same partition if and only if $p_i = p_j$. The number of times $p_i$ is repeated indicates how many vertices are assigned to partition $p_i$. To carry out the partitioning scheme in parallel, the graph $G$ is assumed to be initially distributed across the processor cores. This can be accomplished by computing e.g. the “trivial” partitioning defined by assigning the first chunk of vertices (ordered by vertex ID) to the first processor, the second chunk to the second processor, and so on.

In the first step of the hierarchical partitioning scheme, the distributed graph $G$ is partitioned by applying an existing algorithm such as ParMETIS or PTScotch to produce a partition $P^1 =
\{ p^1_i\}$, $p^1_i \in [0, np_1), i=0, 1,\ldots, nv-1$. In order to carry out the second partitioning step, $np_1$ subgraphs have to be assembled and allocated to the first $np_1$ processors, with each processor taking one subgraph. If the partitioning process is carried out as a preprocessing step, the number of processor cores used in the second step can be smaller than $np_1$. If this happens, more than one subdomain will be allocated to the same processor core. We do not discuss this situation in the present work since it is straightforward to extend the algorithm to handle it, but our implementation in `PETSc` does support this use case.

Two steps are required to construct a local graph from $P^1$. The information in $P^1$ tells us where we should send the vertex IDs, i.e. $v_i$ should be sent to the $p^1_i$th processor, but the required data can’t be exchanged in a single communication step. Instead, communication ranks and data sizes have to be discovered before the vertex IDs can be sent. The two-sided information discovery operation is carried out using the algorithm discussed in [@hoefler2010scalable].

After the discovery, each processor knows how much information it will receive and from whom it will receive it. The one-to-many sparse communication pattern is efficiently implemented by the “star forest” communication object in PETSc called `PetscSF` [@brown2011star]. This vertex ID exchange algorithm is summarized and implemented in the `ISBuildTwoSided` routine in PETSc.

Once the vertex exchange is complete, a vertex set $V_{c}$ is created for the $c$th processor, where $c \in [0, np_1-1]$. A subgraph $G_c$ is extracted from the global graph $G$ through, once again, a sparse communication. The size of $G_c$ is denoted as $nv_c$. Finally, a serial partitioner (or parallel partitioner on a single processor) is applied to partition $G_c$ to produce $\tilde{P}^2_c = \{ p_{c,k}^2\}, p_{c,k}^2 \in [0, np_2-1), k=0, 1,\ldots, nv_c-1, c =0,1,\ldots, np_1-1$. The $\tilde{P}^2_c$ are sent back to the original owners, and then are merged based on the global vertex IDs. The new second-step partition is denoted as $P^2 = \{p^2_i\}, p^2_i \in [0, np_2-1), i = 0, 1,\ldots, nv-1$, the entries of which are a permutation of $\{p_{0,0}^2, p_{0,1}^2,\ldots, p_{0,nv_0-1}^2,\ldots,   p_{c,0}^2, p_{c,1}^2,\ldots, p_{c,nv_{c}-1}^2,\ldots\}$. The final partition $P$ is defined as follows: $$P = \{ p_i = p^1_i \times np_2 + p_i^2 \},\, p^1_i \in P^1,\, p^2_i \in P^2.$$ The entire process is summarized in Algorithm \[alg:hierarch\], where we assume $G$ is initially distributed across the processors.

For some applications we need an arbitrary number, $np$, of subgraphs, but $np$ cannot be factored into $np_1 \times np_2$. Algorithm \[alg:hierarch\] has to be adjusted to handle this situation, and our basic approach is to apply subdomain weights in the first step so that a subgraph may have a different size from other subgraphs, depending on how many smaller subgraphs it will be further divided into. The remainder $r = np \mod np_2$ is computed for a user-specified $np_2$ (usually $np_2$ is the number of processor cores per compute node), and $np_1$ is calculated according to: $$np_1 =
  \left \{
    \begin{array}{rl}
      np / np_2, &\text{if~} r = 0 \\
      np/np_2 +1, &\text{otherwise}.
    \end{array}
  \right .$$

The number of small subgraphs for each subgraph, $S=\{s_c\},
c=0,1,\ldots, np_1-1$, is constructed as follows: $$s_c =
  \left \{
    \begin{array}{rl}
      r , &\text{if~} c=0 \text{~and~} r \neq 0 \\
      np_2, &\text{otherwise}.
    \end{array}
  \right .$$ Subdomain weights are simply derived from $S$ as $W={w_c = s_c/np}, c
=0, 1,\ldots, np_1-1$. A smaller weight indicates that less vertices are assigned to the corresponding subgraph. An offset array, $O=\{ o_c
\}, c=0, 1,\dots, np_1-1$, of size $np_1$ is needed for forming the final partition, and it is constructed by accumulating the entities of $S$, that is, $$o_c =
  \left \{
    \begin{array}{rl}
      0,           &\text{if~} c = 0, \\
      s_c + o_{c-1}, &\text{otherwise}.
    \end{array}
  \right.$$ In the second phase of the hierarchical partitioning, the subgraph $G_c$ is partitioned into $s_c$ small subgraphs, and the corresponding partition is denoted as $\tilde{P}^2_c$. Note that it is different from the previous algorithm where the $G_c$ is always partitioned into $np_2$ smaller subgraphs. The second step partition is formed similarly as ${P}^2$. The final partition, $P=\{p_i\}$, is formed as $$p_i =  o_{p^1_i}+ p_i^2,  ~p^1_i \in P^1,\, p^2_i \in P^2.$$ The generalized parallel hierarchical graph partitioning procedure is summarized in Algorithm \[alg:hierarch2\]. The algorithm was implemented in `PETSc` [@petsc-user-ref] as part of this work, and can be accessed through the command-line option: `-mat_partitioning_type hierarch`.

Fig. \[fig:hierarch\_partition\_2d\_10\] illustrates the process of partitioning a mesh into $np$ processors when $np$ and $np_2$, the number of processor cores on each compute node, are relatively prime. The example assumes that the number of processor cores per compute node is $np_2=4$, but $np=10$ submeshes are required. In the first step of the algorithm, the mesh is partitioned into 3 subdomains of unequal size, with the first subdomain being relatively smaller than the other two. The first submesh is subsequently split into 2 smaller submeshes while other two submeshes are each divided into 4 smaller submeshes. The resulting 10 partitions are then of nearly equal size.

![Demonstration of partitioning a mesh into 10 submeshes. Each compute node has 4 processor cores, and 3 compute nodes are available. The first submesh is split into 2 small submeshes, and the second and third submeshes are partitioned into 4 small submeshes, respectively.\[fig:hierarch\_partition\_2d\_10\]](figures/hierarch_partition_2d_3.jpg "fig:"){width="0.49\linewidth"} ![Demonstration of partitioning a mesh into 10 submeshes. Each compute node has 4 processor cores, and 3 compute nodes are available. The first submesh is split into 2 small submeshes, and the second and third submeshes are partitioned into 4 small submeshes, respectively.\[fig:hierarch\_partition\_2d\_10\]](figures/hierarch_partition_2d_10.jpg "fig:"){width="0.49\linewidth"}

Node assignment algorithm
=========================

By default, libMesh [@libMeshPaper] assigns mesh nodes at partitioning interfaces to the neighboring MPI process with the lower rank. This simple heuristic can lead to a computational load imbalance in which lower MPI ranks have more mesh nodes than higher MPI ranks, *even when the element partition is perfectly balanced*.

An alternative, yet still simple and inexpensive, approach for balancing the mesh nodes on each partition is to assign a node randomly to an MPI rank if that rank has at least one of the node’s attached elements. Unfortunately, this simple approach may cause preconditioner and solver applications to scale unpredictably, and is not optimal for preserving the locality of an element and its neighbor’s data structures, which can be detrimental to the efficiency of a finite element solver.

We propose a novel algorithm to resolve this issue. The basic idea is to apply a partitioner to each pair of MPI processes at the lower-dimensional shared interface between processor boundaries, and assign one resulting submesh to each neighboring MPI rank. Note that each interface mesh is shared by only two MPI processes. The basic idea is shown in Fig. \[fig:nodeassignment\] in detail. This new mesh node assignment algorithm is implemented in `libMesh`.

![Different mesh node assignment schemes. Left: shared mesh nodes are assigned to the neighboring MPI process with the lower rank. Middle: mesh nodes with odd IDs are assigned to the lower MPI rank, even IDs are assigned to the higher MPI rank. Right: shared interface nodes are partitioned into two parts using a partitioning algorithm such as ParMetis or PTScotch. The approach on the right is the most efficient for the test case discussed in Sec. \[sec:test\_case\].\[fig:nodeassignment\]](figures/default_node_assignment.jpg "fig:"){width="0.3\linewidth"} ![Different mesh node assignment schemes. Left: shared mesh nodes are assigned to the neighboring MPI process with the lower rank. Middle: mesh nodes with odd IDs are assigned to the lower MPI rank, even IDs are assigned to the higher MPI rank. Right: shared interface nodes are partitioned into two parts using a partitioning algorithm such as ParMetis or PTScotch. The approach on the right is the most efficient for the test case discussed in Sec. \[sec:test\_case\].\[fig:nodeassignment\]](figures/old_even_node_assignment.jpg "fig:"){width="0.3\linewidth"} ![Different mesh node assignment schemes. Left: shared mesh nodes are assigned to the neighboring MPI process with the lower rank. Middle: mesh nodes with odd IDs are assigned to the lower MPI rank, even IDs are assigned to the higher MPI rank. Right: shared interface nodes are partitioned into two parts using a partitioning algorithm such as ParMetis or PTScotch. The approach on the right is the most efficient for the test case discussed in Sec. \[sec:test\_case\].\[fig:nodeassignment\]](figures/partitioning_node_assignment.jpg "fig:"){width="0.3\linewidth"}

Test case\[sec:test\_case\]
===========================

In this section, we verify the effectiveness of the proposed algorithms with a test case. The parallel preconditioning efficiency of the proposed hierarchical partitioner is compared to that obtained by applying ParMETIS and PTScotch directly. In particular, the novel node assignment algorithm based on the interface mesh partitioning will be shown to significantly improve preconditioning performance. Due to space constraints, we restrict our testing to a single grain growth example here, but the proposed algorithm also works for other physical applications.

Grain growth is the increase in size of grains in a material due to a reduction of the internal energy that is achieved by reducing the total area of grain boundaries (GBs). GBs migrate to reduce the total free energy of the system. Various sources of free energy drive the GB migration process, including stored defect energy, deformation energy, and GB energy. Various modeling approaches have been applied to model grain boundary migration, and the phase field method has emerged as one of the more popular. In the phase field model, each grain is represented by a continuous order parameter $\eta_i$ that is equal to 1 within the grain and equal to 0 in all other grains. The free energy for this problem is $$\begin{aligned}
  f_{loc} = \mu \left( \sum_i^N \left(\frac{\eta_i^4}{4} - \frac{\eta_i^2}{2} \right)  + \gamma \sum_{i=1}^N \sum_{j>i}^N \eta_i^2 \eta_j^2 \right) + \frac{1}{4}\end{aligned}$$ where $N$ is the number of order parameters, and $\mu,\gamma$ are material coefficients. The $\eta_i$ evolve in space and time according to the Allen-Cahn equation, $$\begin{aligned}
  \label{eq:AC}
  \frac{\partial \eta_j}{\partial t} = - L_j \frac{\delta F}{\delta \eta_j},\end{aligned}$$ where $L_j$ is the order parameter mobility. Here $F$ is defined as: $$\begin{aligned}
    F = \int_V \big[ f_{loc}( \eta_1, \ldots, \eta_N) + f_{gr}( \eta_1,  \ldots, \eta_N)  \big] \, dV,\end{aligned}$$ where the gradient energy density $f_{gr}$ is $$\begin{aligned}
  f_{gr} =  \sum^N_j \frac{\kappa_j}{2} |\nabla \eta_j|^2.\end{aligned}$$ The model parameters $L_j$, $\mu$ and $\kappa_j$ are defined in terms of the grain boundary (GB) surface energy $\sigma$, the diffuse GB width $w_{GB}$ and the GB mobility $m_{GB}$. The values of the parameters used in the present simulation are: $L_j = 0.0354524$, $\mu=0.662848$, $\gamma=1.5$ and $\kappa_j = 132.57$.

Eq.  is discretized in 3D with $25$ grains and $9$ order parameters using a first order Lagrange finite element method in MOOSE [@Gaston_2015]. (The order parameters are reused for more than one grain based on a coloring of the adjacency matrix representing the grain connection of the microstructures.) The resulting nonlinear system is solved using a Jacobian-free Newton–Krylov method [@knoll2004jacobian], employing GMRES [@saad1986gmres] together with a restricted additive Schwarz preconditioner [@cai1999restricted; @kong2018fully]. The impact of the various mesh partitioning methods on the preconditioning efficiency are reported below. For reference, the solution at $t=25$ns and $250$ns is shown in Fig. \[fig:grain\_growth\_time\_stepper\].

![Solution at $t=25$ns and $t=250$ns.\[fig:grain\_growth\_time\_stepper\]](figures/timestep1.jpg "fig:"){width="0.49\linewidth"} ![Solution at $t=25$ns and $t=250$ns.\[fig:grain\_growth\_time\_stepper\]](figures/timestep10.jpg "fig:"){width="0.49\linewidth"}

We initially solve this problem on a relatively “coarse” mesh with 9,830,400 hexahedral elements, 9,994,977 nodes and 89,954,793 unknowns. The preconditioner performance for 10 time steps obtained using various partitioning schemes is reported in Table \[tab:partitioning\_coarse\]. The columns of the table are defined as follows: $np$ is the number of processor cores, “EPart” denotes the partitioner used for partitioning the mesh, “PCSetup” is the compute time in seconds spent on the preconditioner setup, “PCApply” is the compute time in seconds spent on the application of the preconditioner, “PCSEFF” is the parallel efficiency of the preconditioner setup, and “PCAEFF” is the parallel efficiency of the preconditioner application. “NR” is the ratio of the maximum mesh node count to the minimum mesh node count; “NR=1.0” indicates the problem is perfectly balanced.

The test is conducted for processor counts between 8,192 and 32,768 on the Theta supercomputer at Argonne National Laboratory. Theta is a massively parallel, many-core system with second-generation Intel Xeon Phi processors. Each compute node has a 64-core processor with 16 gigabytes (GB) of high-bandwidth in-package memory (MCDRAM), 192 GB of DDR4 RAM, and a 128 GB SSD.

    $np$     EPart     PCSetup   PCApply   PCSEFF   PCAEFF    NR
  -------- ---------- --------- --------- -------- -------- ------ -- -- --
   8,192    Hierarch    19.46      8.1      100%     100%    1.35
   8,192    ParMETIS    22.76     10.38     86%      78%     1.57
   8,192    PTScotch    20.33     8.92       \*       \*     1.33
   10,240   Hierarch    16.21      6.6      96%      98%     1.45
   10,240   ParMETIS    19.09     8.17      82%      79%     1.70
   10,240   PTScotch     \*        \*        \*       \*      \*
   16,384   Hierarch    11.02     5.14      88%      79%     1.54
   16,384   ParMETIS    13.2      5.88      74%      69%     1.94
   16,384   PTScotch     \*        \*        \*       \*      \*
   24,576   Hierarch    8.71      3.98      74%      68%     1.68
   24,576   ParMETIS    10.6       4.8      61%      56%     2.04
   24,576   PTScotch     \*        \*        \*       \*      \*
   32,768   Hierarch     6.8      3.15      72%      64%     1.83
   32,768   ParMETIS    8.46      4.35      58%      47%     1.97
   32,768   PTScotch     \*        \*        \*       \*      \*

  : Partitioner performance on “coarse” mesh with 9,830,400 elements. The times and parallel efficiencies for setting up and applying the preconditioner are measured individually, and the ratio of maximum to minimum node count is reported in the “NR” column.\[tab:partitioning\_coarse\]

As shown in Table \[tab:partitioning\_coarse\], in the 8,192-core case, PTScotch gives a result similar to the hierarchical partitioning method, but it fails to partition the mesh for all other processor counts, as indicated in the table with an asterisk. ParMETIS is able to generate partitions for all cases, but the partition quality is not as high as Hierarch’s in the different metrics reported.

The partition generated using Hierarch has better load balance, e.g.Hierarch’s “NR” is 1.45 when using 10,240 processor cores while that of ParMETIS is 1.7. The preconditioner application and setup times are also shorter for Hierarch than for ParMETIS, despite the fact that the same preconditioning algorithm was used in both cases. The parallel efficiencies “PCSEFF” and “PCAEFF” for Hierarch are also 10-20 percentage points higher than the ParMETIS efficiencies, which indicates the proposed algorithm scales better. The efficiencies and corresponding speedup are plotted vs. core count in Fig. \[fig:speedup\_coarse\_part\].

![Speedup and parallel efficiency for various partitioning approaches vs. core count on the “coarse” mesh problem.\[fig:speedup\_coarse\_part\]](figures/speedup_coarse_partitioner.jpg "fig:"){width="0.49\linewidth"} ![Speedup and parallel efficiency for various partitioning approaches vs. core count on the “coarse” mesh problem.\[fig:speedup\_coarse\_part\]](figures/efficiency_coarse_partitioner.jpg "fig:"){width="0.49\linewidth"}

The results shown in Table \[tab:partitioning\_coarse\] include the new partitioner-based node assignment scheme discussed previously. In order to understand and isolate the importance of the node assignment scheme to the overall preconditioner efficiency, we again solve the “coarse” problem with the hierarchical partitioner, but this time we compare the “default” (minimum MPI rank) and partitioner-based node assignment (“part”) schemes.

The numerical results are summarized in Table \[tab:nodeassignment\_coarse\], and it is easily observed that, in all cases, the new node assignment scheme significantly improves the workload balance and reduces the total compute time. For example, in the 8,192-core case, “NR” is 2.35 when using the default node assignment scheme, while it is reduced to 1.35 when using the partitioner-based node assignment algorithm. Parallel efficiency is generally improved by around $30\%$ when using the new node assignment algorithm in place of the default one.

    $np$      NAS     PCSetup   PCApply   PCSEFF   PCAEFF    NR
  -------- --------- --------- --------- -------- -------- ------ -- -- --
   8,192    default    22.21     13.5      88%      60%     2.35
   8,192     part      19.46      8.1      100%     100%    1.35
   10,240   default    20.03    13.105     78%      49%     2.72
   10,240    part      16.21      6.6      96%      98%     1.45
   16,384   default    13.01      8.6      75%      47%     3.04
   16,384    part      11.02     5.14      88%      79%     1.54
   24,576   default     9.4       6.9      69%      39%     3.76
   24,576    part      8.71      3.98      74%      68%     1.68
   32,768   default    8.37      5.78      58%      35%     4.1
   32,768    part       6.8      3.15      71%      64%     1.83

  : Effect of different node assignment algorithms. The “coarse” mesh problem is again solved using the hierarchical partitioner, but in this case we compare the “default” node assignment algorithm (minimum MPI rank) to the interface partitioner approach (“part”) for assigning node ownership.\[tab:nodeassignment\_coarse\]

![Speedup and parallel efficiency for different node assignment algorithms vs. core count on the “coarse” mesh problem.\[fig:speedup\_coarse\_node\_assignment\]](figures/speedup_coarse_nodeassign.jpg "fig:"){width="0.49\linewidth"} ![Speedup and parallel efficiency for different node assignment algorithms vs. core count on the “coarse” mesh problem.\[fig:speedup\_coarse\_node\_assignment\]](figures/efficiency_coarse_nodeassign.jpg "fig:"){width="0.49\linewidth"}

To further understand the scalability of the new partitioner, we also ran the same problem on a “fine” mesh with 78,643,200 hexahedral elements and 79,300,033 nodes. The resulting system has 713,700,297 unknowns, and is again solved by the Jacobian-free Newton–Krylov method, employing GMRES and a Schwarz preconditioner. Timings and parallel efficiencies for the “fine” mesh are reported in Table \[tab:partitioning\_fine\], where it is once again observed that the hierarchical partitioner improves the preconditioner performance significantly, as compared to ParMETIS. The PTScotch results are omitted in this case since that partitioner was unable to generate a partition of the fine mesh in any of the cases tested.

For the 8,192-core case, “NR” is only 1.14 (close to a perfect balance ratio) when using Hierarch, while it is 2.4 when using ParMETIS. The preconditioning process is $20\%$ faster for Hierarch than it is for ParMETIS. The ParMETIS partitioner’s performance can also be irregular, as observed in the 24,576-core case where “NR” is 3.2 for ParMETIS and only 1.24 for Hierarch. This imbalance leads to much slower preconditioner application and setup times (12s and 10s, respectively) for the ParMETIS partitioner.

The corresponding parallel efficiencies have a similar pattern, that is, the parallel efficiency of the preconditioner application for Hierarch is $30\%$ higher than that of ParMETIS, and the parallel efficiency of the preconditioner setup for Hierarch is $10\%$ higher than that of ParMETIS. The speedup and parallel efficiency for the “fine” mesh case are also summarized in Fig. \[fig:speedup\_fine\_part\].

    $np$     EPart     PCSetup   PCApply   PCSEFF   PCAEFF    NR
  -------- ---------- --------- --------- -------- -------- ------ -- -- --
   8,192    Hierarch   134.59     80.65     100%     100%    1.14
   8,192    ParMETIS   138.69     98.28     97%      82%     2.4
   10,240   Hierarch   115.63    71.494     93%      90%     1.16
   10,240   ParMETIS   121.50    78.499     88%      82%     1.87
   16,384   Hierarch    78.59    41.905     86%      96%     1.22
   16,384   ParMETIS   85.610    68.675     79%      59%     1.64
   24,576   Hierarch   56.463    29.589     79%      90%     1.24
   24,576   ParMETIS    65.17    41.857     69%      64%     3.2
   32,768   Hierarch    47.99    20.717     70%      97%     1.34
   32,768   ParMETIS   54.165    34.801     62%      58%     1.79

  : Partitioner performance on “fine” mesh with 78,643,200 elements. PTScotch is omitted because it was not able to successfully generate any partitions of the fine mesh.\[tab:partitioning\_fine\]

![Speedup and parallel efficiency for various partitioning approaches vs. core count on the “fine” mesh problem.\[fig:speedup\_fine\_part\]](figures/speedup_fine_partitioner.jpg "fig:"){width="0.49\linewidth"} ![Speedup and parallel efficiency for various partitioning approaches vs. core count on the “fine” mesh problem.\[fig:speedup\_fine\_part\]](figures/efficiency_fine_partitioner.jpg "fig:"){width="0.49\linewidth"}

Similarly, we compare the preconditioning performance for the new node assignment approach with using the “default” node assignment heuristic. We observe that, especially when the number of processor cores is large, it is essential to maintain a workload balance in order to achieve good parallel efficiency. For example, when we use 32,768 processor cores, “NR” is 2.02 for the default node assignment, while it is 1.34 for the partitioning-based node assignment, and these different balance ratios lead to significantly different overall performance levels. The parallel efficiency of the preconditioner application for the partitioner-based node assignment is $20\%$ higher than that of the default node assignment algorithm, while the parallel efficiency of the preconditioner setup is about $10\%$ better. The parallel efficiency and the speedup for the different node assignment algorithms are also summarized in Fig. \[fig:speedup\_fine\_node\_assignment\].

    $np$      NAS     PCSetup   PCApply   PCSEFF   PCAEFF    NR
  -------- --------- --------- --------- -------- -------- ------ -- -- --
   8,192    default   146.42    89.844     92%      90%     1.51
   8,192     part     134.59     80.65     100%     100%    1.14
   10,240   default   117.35    62.092     92%      104%    1.56
   10,240    part     115.63    71.494     93%      90%     1.16
   16,384   default   83.736    49.294     80%      82%     1.72
   16,384    part      78.59    41.905     86%      96%     1.22
   24,576   default   62.149    36.264     72%      74%     1.89
   24,576    part     56.463    29.589     79%      91%     1.24
   32,768   default   52.769    29.520     64%      68%     2.02
   32,768    part      47.99    20.717     70%      97%     1.34

  : Effect of different node assignment strategies for the “fine” mesh. The slightly superlinear PCAEFF value in the 10,240 core case is sometimes observed at smaller core counts depending on the partitioner, but does not signify a general trend.\[tab:nodeassignment\_fine\]

![Speedup and parallel efficiency for different node assignment algorithms vs. core count on the “fine” mesh problem.\[fig:speedup\_fine\_node\_assignment\]](figures/speedup_fine_nodeassign.jpg "fig:"){width="0.49\linewidth"} ![Speedup and parallel efficiency for different node assignment algorithms vs. core count on the “fine” mesh problem.\[fig:speedup\_fine\_node\_assignment\]](figures/efficiency_fine_nodeassign.jpg "fig:"){width="0.49\linewidth"}

Conclusions and future work
===========================

A general-purpose hierarchical mesh partitioning method was introduced and discussed for large-scale scientific computing. The partitioner distributes graphs recursively onto both $np_1$ (the number of compute nodes) and $np_2$ (usually $\leq$ the number of processor cores per compute node) subdomains. Note that $np_2$ can be different on each compute node, making the hierarchical partitioning algorithm useful for general calculations on heterogeneous collections of nodes.

Mesh nodes on inter-processor interfaces are often assigned to the lower MPI rank by default, and this simple choice can lead to a significant load imbalance. The issue is addressed by introducing a new node balancing algorithm in which a graph corresponding to the interface mesh shared by two processor cores is partitioned into two submeshes using a partitioner, and one submesh is assigned to the lower MPI rank while the other is sent to the higher MPI rank. This scheme preserves the data locality and maintains a balance in the computational workload. We numerically demonstrate that the hierarchical partitioner approach combined with the new node balancing technique reduces the application and setup time of the preconditioner by about 50% compared to direct application of existing algorithms.

While this study focused on the correlation between partition quality and preconditioner efficiency, future research will investigate the performance and scalability of other parts of the simulation, including the partitioning process itself.

Acknowledgments {#acknowledgments .unnumbered}
===============

This research was supported through the INL Laboratory Directed Research & Development (LDRD) Program under DOE Idaho Operation Office Contract DE-AC07-05ID14517 and used resources of the Argonne Leadership Computing Facility, which is a DOE Office of Science User Facility supported under Contract DE-AC02-06CH11357. This manuscript has been authored by Battelle Energy Alliance, LLC under Contract No. DE-AC07-05ID14517 with the U.S. Department of Energy. The United States Government retains and the publisher, by accepting the article for publication, acknowledges that the United States Government retains a nonexclusive, paid-up, irrevocable, and worldwide license to publish or reproduce the published form of this manuscript, or allow others to do so, for United States Government purposes.


All of Fox's Tuesday comedies got a bump before their new episodes tomorrow: The network announced today that Glee, New Girl, and Raising Hope have all been renewed for a new season. (Things would have been awfully awkward for The Glee Project if its mothership series got yanked, since the spinoff just announced its season two contestants.) That's good, expected news for Fox's sitcom side, and the network will need it, because things are dire in the drama department: Shows like The Finder, Alcatraz, Fringe, and Touch are all on the bubble. Happy Anniversary?


No evidence for activation of the unfolded protein response in neuronopathic models of Gaucher disease.
Gaucher disease (GD), the most common lysosomal storage disorder (LSD), is caused by defects in the activity of the lysosomal enzyme, glucocerebrosidase, resulting in intracellular accumulation of glucosylceramide (GlcCer). Neuronopathic forms, which comprise only a small percent of GD patients, are characterized by neurological impairment and neuronal cell death. Little is known about the pathways leading from GlcCer accumulation to neuronal death or dysfunction but defective calcium homeostasis appears to be one of the pathways involved. Recently, endoplasmic reticulum stress together with activation of the unfolded protein response (UPR) has been suggested to play a key role in cell death in neuronopathic forms of GD, and moreover, the UPR was proposed to be a common mediator of apoptosis in LSDs (Wei et al. (2008) Hum. Mol. Genet. 17, 469-477). We now systematically examine whether the UPR is activated in neuronal forms of GD using a selection of neuronal disease models and a combination of western blotting and semi-quantitative and quantitative real-time polymerase chain reaction. We do not find any changes in either protein or mRNA levels of a number of typical UPR markers including BiP, CHOP, XBP1, Herp and GRP58, in either cultured Gaucher neurons or astrocytes, or in brain regions from mouse models, even at late symptomatic stages. We conclude that the proposition that the UPR is a common mediator for apoptosis in all neurodegenerative LSDs needs to be re-evaluated.


Ruggedness testing and validation of a practical analytical method for >100 veterinary drug residues in bovine muscle by ultrahigh performance liquid chromatography-tandem mass spectrometry.
In this study, optimization, extension, and validation of a streamlined, qualitative and quantitative multiclass, multiresidue method was conducted to monitor >100 veterinary drug residues in meat using ultrahigh-performance liquid chromatography-tandem mass spectrometry (UHPLC-MS/MS). Optimization centered on extensive ruggedness evaluation of the method. Various clean-up sorbents were tested and the amount of co-extractives were weighed, matrix effects were measured using post-column infusion of representative analytes, the effect of extract dilution before injecting was studied, and analyte recoveries and reproducibilities were determined. In order to extend our previous method, more drug analytes were added that possessed a wider range of chemical properties, and a re-appraisal of different types of C18 in dispersive solid-phase extraction clean-up and mobile phases in UHPLC-MS/MS was done. Ultimately, end-capped C18 and post-column infusion of ammonium formate as an ionization enhancer for the late-eluting anthelmintics were found to give improved qualitative results for greater analytical scope. A multi-day, multi-analyst validation demonstrated that the final method is suitable for screening of 113 analytes, identifying 98 and quantifying (recoveries between 70-120% and RSD<25%) 87 out of the 127 tested drugs at or below US regulatory tolerance levels in bovine muscle.


The remaining positions were filled on January 16 with various changes: Bill Lazor took over as offensive coordinator after last serving the same role in 2017 and 2018 with the Cincinnati Bengals; Jacksonville Jaguars offensive coordinator John DeFilippo was hired as quarterbacks coach; quarterbacks coach Dave Ragone was moved to pass game coordinator; offensive quality control assistant Brian Ginn became assistant special teams coach; defensive assistant Chris Jackson switched to assistant wide receivers coach; and offensive assistant Shane Toub was named defensive quality control coach.[5]

Entering the 2020 offseason, the Bears had 21 players set to become free agents, including two restricted free agents and two exclusive-rights free agents.[19] Free agency officially began on March 18,[20] though teams were not allowed to immediately announce signings due to physical examinations being delayed by the coronavirus pandemic.[21]

On April 3, the team picked up linebacker Barkevious Mingo on a one-year contract; the ex-first rounder spent much of his only season with the Houston Texans on special teams.[12] Two weeks later, former Green Bay Packers offensive lineman Jason Spriggs and Nevada kicker Ramiz Ahmed were signed to one-year deals.[9] On April 28 and 29, Chicago gave one-year deals to defensive tackle John Jenkins and receiver/return specialist Trevor Davis, respectively. Jenkins played eight games for the Bears in 2017, including one start, and recorded eight tackles.[31] Davis played for the Oakland Raiders and Miami Dolphins in 2019 as a receiver and return specialist, including catching four passes for 42 yards in the Raiders' win over the Bears that year.[32]

Safety Tashaun Gipson was signed to a one-year deal on May 1. Released by the Texans earlier in the week, he recorded 51 tackles and three interceptions (one of which was returned for a touchdown) in 2019 before being placed on injured reserve.[33] Three days later, the Bears added receiver Ted Ginn Jr., also on a one-year agreement; the 13-year veteran caught 30 passes for 421 yards and two touchdowns for the New Orleans Saints in 2019.[34]

Departures

On January 5, guard Kyle Long announced his retirement on Twitter after playing his entire career with the Bears; he struggled with injuries in his later years, including being placed on injured reserve in 2019.[35]

The Bears' first cuts took place on February 21 with receiver Taylor Gabriel and cornerback Prince Amukamara; both players suffered injuries in 2019.[36] Linebacker Leonard Floyd was released on March 17; the former first-round pick recorded 154 tackles, 18.5 sacks, an interception, and three fumble recoveries in four seasons with the Bears, but had just three sacks in 2019.[37]

After free agency began, various Bears players whose contracts expired left for other teams. On March 20, a trio of Bears departed with safety Ha Ha Clinton-Dix joining the Dallas Cowboys, while quarterback Chase Daniel and defensive lineman Nick Williams went to the Detroit Lions. In his lone season with the Bears, Clinton-Dix recorded 78 tackles and two interceptions, returning one for a touchdown; as a backup in Chicago, Daniel started three games; Williams recorded six sacks in 2019.[8] A week later, linebacker Nick Kwiatkoski joined the Las Vegas Raiders after recording career bests in tackles (76), sacks (three), and pass breakups (four) as a backup in 2019.[13][38] A pair of Bears in linebacker Kevin Pierre-Louis and offensive lineman Cornelius Lucas signed with the Washington Redskins; Pierre-Louis started three games for Chicago in 2019 as he had a career-high 32 tackles, three pass deflections, and an interception, while Lucas started eight games at tackle and allowed just one sack.[16][14]

On April 17, tight end Trey Burton was released. Despite recording career bests in receiving in his first year with the Bears in 2018, he struggled with injuries in 2019.[9] Another tight end Dax Raymond was waived ten days later; he spent the 2019 season on the practice squad after catching three passes for 22 yards in the preseason.[39]

NFL Draft

The Bears entered the 2020 NFL Draft with sports outlets generally agreeing they needed help at tight end, offensive line, and defensive back, with quarterback and wide receiver also being positions that could be bolstered.[40][41][42][43] Prior to the draft, the team met with 46 prospects: three such meetings took place at the player's Pro Day on his respective campus, five at the East–West Shrine Bowl, eight at the Senior Bowl, 11 at the NFL Scouting Combine, and 19 conducted virtually; Houston offensive lineman Josh Jones also participated in a private visit with the Bears.[44]

After not having any picks in the first round for the second consecutive year, Chicago used its two second-round selections on Notre Dame tight end Cole Kmet (No. 43) and Utah cornerback Jaylon Johnson (No. 50). Kmet, who grew up near Chicago and was a Bears fan during his childhood, caught 43 passes for 515 yards and six touchdowns in 2019, while Johnson was named first-team All-Pac-12 Conference and recorded 36 tackles two interceptions during his final year, but fell from his projected first-round draft grade after undergoing surgeries on his shoulders.[45] In the fourth round, the Bears traded their No. 163 selection and a 2021 fourth rounder for the Minnesota Vikings' No. 155 pick, which they used on Tulsa edge rusher Trevis Gipson; in 2019, Gipson led his team in sacks and tackles-for-loss (TFL) with eight and 15, respectively.[46] A second fifth rounder (No. 163) was used to take Georgia Southern cornerback Kindle Vildor, a 2019 first-team All-Sun Belt Conference member who recorded 27 tackles and two interceptions in his final season.[47] Later in the round, the Bears traded the 196th-, 200th-, and 233rd-overall picks to the Eagles for No. 173 and the seventh-round No. 227. Tulane receiver Darnell Mooney was selected with the 173rd-overall pick; Mooney, who ran a 4.38-second 40-yard dash at the Combine, caught 48 passes for 713 yards in 2019 and ended his college career with 19 receiving touchdowns.[48] The final two selections were consecutive picks in seventh round (Nos. 226 and 227) and were used to take offensive linemen: Colorado tackle Arlington Hambright started 11 games for his school in 2019, while Lachavious Simmons started all four years at Tennessee State at guard and tackle.[49]

In September 2018, the Bears traded their first– and third-round selections (Nos. 19 and 81, respectively), along with 2019first- and sixth-round selections to the Las Vegas Raiders (known then as the "Oakland Raiders") in exchange for linebackerKhalil Mack and the Raiders' second- (No. 43) and seventh- (No. 226) round selections; the latter of which was originally a conditional fifth-round selection.[51]

The Bears traded their original fourth-round selection (No. 125) as well as 2019 third- and fifth-round selections to the New England Patriots in exchange for Patriots' 2019 third- and sixth-round selections.[52]

As the result of the negative differential of free agent signings and departures that the Bears experienced during the first wave of the 2019 free agency period, the team received one compensatory selection, 4th round—No. 140, to compensate for the loss of safetyAdrian Amos. It was the first time since 2009 that the Bears received a compensatory selection.[54]

^Mayer, Larry (March 18, 2020). "Report: Bears add tight end Jimmy Graham". Chicago Bears. Retrieved March 19, 2020. NFL teams are prohibited from announcing that they have agreed to terms with a free agent pending a physical until the player officially signs his contract. And it's unclear when that will be allowed to happen because—due to concerns about the coronavirus—the league is not permitting clubs to meet with free agents at their facilities or other locations.


Q:

Angular - TitleCase - Can we have words like 'in' non-capitalised?

I have seen TitleCase used for capitalizing each word of a string which is useful, however...
I am wanting to output movie titles that have been stored as all lowercase. I could use TitleCase, but this would not give the appearance that people usually expect.
For example, the movie title (in lowercase):

the assassination of jesse james by the coward robert ford

I could use TitleCase for output:

The Assassination Of Jesse James By The Coward Robert Ford.

However when seen in print in either magazine or on movie posters the O and B of 'of' and 'by' are never capitalized.
Is there a simple method by which I can get the look I am wanting to achieve, other than simply using {{movie.title | titlecase}}?
I know that I could create a dictionary and search for the keywords within the strings, but I am wanting something potentially simpler...

A:

You could write your own pipe that capitalizes every word EXCEPT the ones you don't want capitalized.
import { Pipe, PipeTransform } from '@angular/core'

@Pipe({ name: 'titleCaseExcept' })
export class TitleCaseExceptPipe implements PipeTransform {
  transform(value: string): string {
    if (!value) return value; // safeguard

    // regex to find all words EXCEPT the ones we don't want capitalized
    let words: RegExp = /\b(?!of|by|the)\w+/g;
    // capitalize the first letters of said words
    let newVal = value.replace(words, (match) => {
      return match.replace(/^\w/, (word) => word.charAt(0).toUpperCase() + word.substr(1).toLowerCase());
    })

    // always capitalize the first character of newVal
    return newVal.charAt(0).toUpperCase() + newVal.substr(1);
  }
}

Add words you would like excluded to the regex as you see fit.


Q:

Rotated CSS Box Shadow

All can anyone tell me how i could possible get this rotated shadow to an image using CSS?
If possible also with the border radius done in CSS

A:

You'd probably have to create a transparent element with the shadow applied and rotate that behind your image. Something like:

SO isn't a "free freelancer" service, so give it a try and update your question with any issues you encounter.


Electronics Parts

Shop With Confidence

C20D (8H012) Maytag Freezer - Instructions

All installation instructions for C20D parts

These instructions have been submitted by other PartSelect customers and can help guide you through the freezer repair with useful information like difficulty of repair, length of repair, tools needed, and more.

Needed a new bulb under the microwave.

After unplugging the microwave and removing the screw, I removed the old bulb and put in the new one!! I made sure it was in securely and the difference in the light was awesome! I use this light when I bake bread and let it rise inside the microwave, but DO NOT turn it on. The heat from this light helps the bread to rise properly!!


There are about 869 species of ticks described so far \[[@ppat-0040007-b001]\], most of which are responsible for the transmission of a huge diversity of microorganisms belonging to almost all the trees of life (viruses, bacteria, protozoa, fungi, and nematodes) \[[@ppat-0040007-b002]--[@ppat-0040007-b004]\]. Despite the strong opportunity for interaction between these pathogenic species, little is known about the competitive interactions between tick-borne diseases within the vector and the vertebrate host (see \[[@ppat-0040007-b003]\] for review).

Severity of symptoms is often found associated with co-infection by different pathogens (e.g., \[[@ppat-0040007-b003],[@ppat-0040007-b005]--[@ppat-0040007-b007]\]). Moreover, dual infections may affect the therapeutic strategies \[[@ppat-0040007-b005]\]. Exploring the incidence of co-infections and testing for possible interactions (positive or negative) thus represent important objectives.

Theileria annulata, Babesia bovis, and Anaplasma marginale are among the most economically important haemoparasitic tick-borne diseases of ruminants worldwide \[[@ppat-0040007-b008]\] and represent a serious economic challenge, particularly in developing countries \[[@ppat-0040007-b009]--[@ppat-0040007-b011]\]. In this paper we analyse the co-occurrence of these pathogens within individual bovine hosts in northeastern Algeria (North Africa) from one original dataset and one published dataset from the same region \[[@ppat-0040007-b012]\] that we have reanalysed, and test for the existence of positive or negative associations between these pathogens. We then discuss the implications of our findings in terms of therapeutic strategies and further studies.

All samples were collected around Boutheldja, a small town located on the northeast border of Algeria (close to Tunisia) and east of Annaba in Algeria (GPS coordinates 36° 45′ 7.0 N; 8° 10′ 0 E) corresponding to an area of 113.53 km^2^ ([Figure S1](#ppat-0040007-sg001){ref-type="supplementary-material"}). The sampling period extended from July to December 2004. Ill cattle were diagnosed by private veterinarians, who were contacted directly by their owners. The main criteria used for diagnosis were the presence of the ticks, a hyperthermic condition, presence of icterus, ganglionic hypertrophy, feebleness, lack of appetite, anorexia, anaemia, and dehydration. In case of positive diagnostic a blood smear was carried out, as described in [Table 1](#ppat-0040007-t001){ref-type="table"}. Parasites were then identified according to morphology, localisation in the erythrocytes, and using the key proposed by Morel in 1981 \[[@ppat-0040007-b013]\]. We also reanalysed the data from a published descriptive work \[[@ppat-0040007-b012]\] undertaken in 2002 in the same part of Algeria on 54 cattle with an identical approach as described above.

######

Within-Cattle Occurrence Correlation between Pathogens

![](ppat.0040007.t001)

Four species were identified in the samples: T. annulata, B. bovis, A. marginale, and Theileria orientalis. Note that *Anaplasma* are rickettsial bacteriae while the others are apicomplexan sporozoan (piroplasms), and that transovarial transmission is only known for Babesia sp. and not for the three other species. In the area investigated, Theileria sp. are transmitted by different *Hyaloma* ticks, B. bovis is transmitted by the tick Boophilus annulatus, and A. marginale by B. annulatus and Rhipicephalus bursa \[[@ppat-0040007-b004]\]. All are intracellular parasites \[[@ppat-0040007-b014]\].

In 2004, the most frequently encountered pathogenic agent was T. annulata (47.6% of infected cattle), followed by A. marginale (40.5%), B. bovis (33.3%), and T. orientalis (2.4%). In 2002, as presented by \[[@ppat-0040007-b012]\], some differences were observed with 74%, 24%, 8%, and 16% for T. annulata, A. marginale, B. bovis, and T. orientalis, respectively. The comparison of microbe prevalences between 2002 and 2004 samples was undertaken with an approximation of the Fisher exact test with 1,000,000 randomisations using the module Struc of Genepop version 3.1.c \[[@ppat-0040007-b015]\]. Randomisation tests gave significant differences (*p*-values ≤ 0.036) for all species but A. marginale (*p*-value = 0.117). In 2004 (original sample), 12 hosts appeared negative, 15 were infected by T. annulata only, ten by B. bovis only, seven by A. marginale, and four were infected both by B. bovis and *A. marginale*, five by T. annulata and *A. marginale*, and one by T. orientalis and A. marginale. In 2002 \[[@ppat-0040007-b012]\], four hosts appeared negative, 29 were infected by T. annulata only, three by B. bovis only, four by A. marginale, three by T. orientalis, and one was infected both by B. bovis and *A. marginale*, five by T. annulata and *A. marginale*, two by T. orientalis and A. marginale, and three by T. annulata and *T. orientalis*. Presence or absence of a particular micropathogen was treated as a phenotypic character. Thus there were four such phenotypic characters each taking the value 1 (absence) or 2 (presence). To study the association between these four characters a correlation coefficient, initially designed for genetic data, was adapted to our data. This coefficient of correlation is noted *R~ij~*, where *i* and *j* stands for the pair of loci (or as here, phenotypic characters), the association of which is under study. It was computed by Genetix 4.02 \[[@ppat-0040007-b016]\]. This parameter is described in a series of articles cited in the Genetix help menu (i.e., \[[@ppat-0040007-b017]--[@ppat-0040007-b019]\]). If *n* ~11~ is the number of cattle without pathogens *i* or *j*, *n* ~12~ the number of cattle infected by *j* but not by *i*, *n* ~21~ those infected by *i* but not *j*, *n* ~22~ those infected by both species, and *n* the total sample size, then for a given pathogen pair *ij*:

The significance of *R~ij~* was tested by a permutation procedure. Phenotypes (1 or 2) of the two characters studied (e.g., *T. annulata* and B. bovis) are associated at random a number of times (10,000) and a statistic *R* is recalculated on the randomised data set. The exact *p*-value is estimated as the proportion of statistics from randomised data sets that are larger or equal to the one observed in the real data set. This test was undertaken under Genetix 4.02, which uses Weir\'s *R* \[[@ppat-0040007-b020]\] as the statistic. However, given how we coded data, this statistic simply corresponds to *R~ij~* absolute value (bi-lateral testing). The 12 ill cows that were negative according to the cytological tests in 2004 were not taken into account for this study, considering that microbes might have been missed (false negative). The four negative cattle from \[[@ppat-0040007-b012]\] were also ignored. However, undertaking the same tests and including these data as true negatives (no microbe) did not change the results described below. To unite both data sets (2004 and 2002), we simply averaged *R~ij~* (unweighted mean) and combined *p*-values with the Fisher procedure \[[@ppat-0040007-b021]\] where the quantity can be compared to a chi-square distribution with 2*n* degrees of freedom, with *n* the number of tests (here *n* = 2) and *p~i~* the *p*-value of the *i*th test. The results of the correlation study between pairs of pathogenic agents provided mainly negative correlations (five out of six for combined data, [Table 1](#ppat-0040007-t001){ref-type="table"}). For the original sample (2004), only one of the correlations, between T. annulata and B. bovis, was highly significant. In fact, no cattle individual was found co-infected by both pathogens despite an expected co-occurrence of 0.476\*0.333\*42 = 7 co-infected individuals. The second interesting result, though marginally non-significant, was observed between T. annulata and A. marginale, for which only five individuals were found co-infected for an expected frequency of height. All other pairs were not significant, but we can notice that with only one case reported for T. orientalis, the rarity of this species in 2004 makes any conclusion impossible for this pathogen. Nevertheless, the analysis combining 2002 \[[@ppat-0040007-b012]\] and 2004 samples confirms all the tendencies observed ([Table 1](#ppat-0040007-t001){ref-type="table"}). An absolute exclusion exists between T. annulata and B. bovis (no co-infection observed), a strong avoidance characterises the relationship between T. annulata and A. marginale, and a moderate one (if any) between this species and T. orientalis.

Because *R~ij~* is oriented and because we coded absence as 1 and presence as 2 for each phenotype, a positive value would bear witness to a positive association between the two pathogenic agents within the same individual hosts, while a negative value gives evidence for avoidance between the pairs of microbes studied. In the first case, different interpretations can be formulated as cooperation between pathogens (immunocompromising by one agent, opening the gate to infection by the other) or identical ecological needs (e.g., same vector). Immunosuppressive effects are what seem to be most of the time observed for various pathogenic agents, in particular in tick-borne diseases, as babesioses with other parasites in mice, or anaplasmosis with louping ill virus in sheep and goats (reviewed in \[[@ppat-0040007-b022]\]). In the case of a negative association, a hypothesis for competitive exclusion or at least a negative interference (cross-immunisation) can be advanced. This is the case for T. annulata and B. bovis, which appear to strictly avoid co-infection. This is also the case for T. annulata and A. marginale, though to a lower extent and probably also for T. annulata and *T. orientalis*, though the rarity of the latter species (low statistical power) forbids a definitive conclusion. This may seem to contradict the conclusions found in other studies on similar systems \[[@ppat-0040007-b023]--[@ppat-0040007-b025]\], though prevalence differences, lack of detailed data, and absence of specific analysis may be the main causes of this apparent discrepancy. Significant negative correlations always involve T. annulata against the other pathogen species. In the area studied, Theileria sp. and the other pathogens (B. bovis, A. marginale) are transmitted by different tick species \[[@ppat-0040007-b004]\]. Thus, competition must occur within the vertebrate host. Within-host competition between microbes (mostly intra-specific) was reviewed in Read and Taylor \[[@ppat-0040007-b026]\], with the best documented examples apparently found in Plasmodium sp. Competition was poorly studied in tick-borne diseases and only suspected once (to our knowledge) between Anaplasma phagocytophilum, Ehrlichia muris, and Babesia microti in unfed adults of Ixodes persulcatus in northwestern Russia \[[@ppat-0040007-b027]\]. This might confirm a generalised weak compatibility between these three kinds of intracellular pathogens within the vector \[[@ppat-0040007-b027]\] as well as within the vertebrate host (present study). Weak compatibility between these pathogens was never evidenced in vertebrate hosts for which specific studies are scarce or difficult to interpret in that perspective. Immunological surveys are not conclusive enough, as they may better reflect the history of sequential infections, not necessarily all successful, experienced by one host. Many studies report the co-occurrence of tick-borne micro-pathogens (e.g., \[[@ppat-0040007-b003],[@ppat-0040007-b005],[@ppat-0040007-b012],[@ppat-0040007-b023],[@ppat-0040007-b024]\] and references therein), and specific analyses seemed to conclude with positive associations or even suggested cooperation in multi-infected mice: between Borrelia burgdorferi (Lyme disease agent) and B. microti (transmission to tick is enhanced) \[[@ppat-0040007-b006]\] or between B. burgdorferi and A. phagocytophilum (*Borrelia* number is increased in co-infected mice) \[[@ppat-0040007-b028]\] (see also \[[@ppat-0040007-b029]\] for review and references therein). Synchronous infections with Babesia divergens and A. phagocytophila seem very common, but their interaction remains poorly understood and a suppression of *Babesia* by *Anaplasma* even seems possible (reviewed in \[[@ppat-0040007-b025]\]). As suggested above, such exclusion may be mediated by host immune system (concomitant immunity) or by direct interference (one pathogen tends to eliminate the other). Within the vector, most studies only report the co-occurrence of different microbes \[[@ppat-0040007-b010],[@ppat-0040007-b029]--[@ppat-0040007-b037]\]. Associations between different pathogenic species were rarely tested, and only positive associations \[[@ppat-0040007-b006],[@ppat-0040007-b028],[@ppat-0040007-b038],[@ppat-0040007-b039]\] or no effect \[[@ppat-0040007-b040]\] between borrelia spirochaetes and co-infecting microbes were detected.

Exclusion between pathogens may appear beneficial to the host, as severity of symptoms is often found associated with co-infection by different pathogens (e.g., \[[@ppat-0040007-b003],[@ppat-0040007-b005]--[@ppat-0040007-b007]\]). Nevertheless, depending on the mechanisms involved and which, if any, of the pathogens is competitively dominant, this phenomenon may severely affect the outcome of prophylactic or vaccination campaigns. If one pathogenic species is less sensitive to treatment but at a competitive disadvantage against the most sensitive one, this may lead to the opening of the widest gate to the most pathogenic microbe. It is thus essential to better understand the origin and mechanisms of such competitive interactions, not only for babesioses, theilerioses, and anaplasmoses that represent a real threat to livestock on a global scale, particularly in developing countries where they constrain economic improvement \[[@ppat-0040007-b008]--[@ppat-0040007-b010]\], but also for other vector-borne or other diseases affecting animals or humans. This parameter is thus worth investigating further, because it may open new perspectives in the design of therapeutic strategies of economically and medically important pathogenic agents, particularly in tick-borne and vector-borne diseases, where it has attracted little attention so far.

Supporting Information {#s2}
======================

###### A Typical Landscape of El-Tarf Wilaya around Boutheldja, on the Northeast Border of Algeria (Close to Tunisia), East of Annaba in Algeria

Several local breed cattle, as those studied in the present study, can be seen. All cattle belong to the so-called Atlas brown breed. The Cheurfa and Guelmoise sub-breeds harbor various clear coat colors, almost white for some. The Sétifienne displays a uniform black coat and the Chelefienne a fawn coat. Photo credit: Loubna Dib.

(2.8 MB TIF)

######

Click here for additional data file.

We thank Franck Prugnolle for very useful and stimulating discussions and one anonymous referee for helpful suggestions.

Loubna Dib is with the Institut Vétérinaire, Centre Universitaire El Tarf, Route de Matroha, El Tarf, Algeria. Idir Bitam is with the Laboratoire d\'Entomologie Médicale, Annexe Sidi Fredj, Institut Pasteur d\'Alger, Algeria . Maja Tahri and Mourad Bensouilah are with the Laboratoire d\'Ecobiologie des Milieux Marin et Littoraux, Université Badji Mokthar, Annaba, Algeria. Thierry De Meeûs is with the Génétique et Evolution des Maladies Infectieuses (GEMI), UMR 2724 IRD/CNRS, Centre IRD, Montpellier, France.

**Author contributions.** MAB conceived and designed the experiments. LD, IB, and MT performed the experiments. IB and TDM analyzed the data. IB contributed reagents/materials/analysis tools. TDM wrote the paper.

**Funding.** Funding of this work was supported by the Centre Universitaire El Tarf, the CNRS, and the IRD. Thierry De Meeûs is supported by the CNRS and IRD.

**Competing interests.** The authors have declared that no competing interests exist.


Improving a building’s health, energy performance and longevity while conserving the structure is a job that requires experience. It also demands an understanding of how altering the elements of a building impacts on the whole.


Auburn lands important four-star forward

Technically, Bruce Pearl can't even speak to Auburn recruits until the calendar turns to the 24th of August. That hasn't stopped his staff of assistant coaches from putting in serious work, though, and that work was rewarded on Friday night.

While competing in the Under Armour Elite 24 Slam Dunk and Three Point Championship, four-star forward Danjel Purifoy announced that he would play his college ball at Auburn.

A 6-foot-6 native of Alabama who is spending his senior season at Chatham (Va.) Hargrave Military Academy, Purifoy is exactly the type of player that Tiger fans hoped Pearl and his staff would be able to lure to campus.

Pearl has always loved athletes who can be used interchangeably and that's exactly what Purifoy is. He's a strapping 210 pounder who is a physical competitor. He specializes slashing to the hoop in transition or off of dribble drives, he rebounds very well and he can be a very good defender.

Long term, Purifoy needs to improve his jump shooting from deep but he also adds versatility. Though technically a little short for a power forward at the SEC level, Purifoy can easily slide over from the wing and play on the interior. His long arms and physical toughness allow him to defend bigger players effectively and because of that Pearl and his staff will be able to use him in just about any kind of lineup they would like to use.

Currently ranked No. 82 in the class of 2015, Purifoy is a four-star prospect and the first player to give Auburn a nod from the class of 2015. Given Pearl's history of success on the recruiting trail and that he's just a few hours from the NCAA allowing him to have contact recruits, Purifoy is likely the first of many ranked prospects that will make their way to Auburn as long as Pearl is there.


Students, Faculty, Community Members Gather To Combat Food Insecurity

The solution for solving food insecurity in Athens County? Round up the best and brightest minds in food insecurity, sprinkle in some social innovation, and watch as new ideas are formed.

Got Food?, Ohio University’s first student-led conference on food insecurity, was held at the Voinovich School of Leadership and Public Affairs on the Ridges on April 4.

The conference was organized by Ashley Williams, in conjunction with Laura Black’s communication studies capstone class, which assisted with Got Food? as part of their final project.

Williams, a freshman research scholar for the Voinovich School, was inspired by a similar event she attended as a high school junior at The Ohio State University on alleviating poverty through entrepreneurship. The idea of a group of individuals from various backgrounds coming together to solve a problem motivated her to replicate the event in Athens.

“There is an even stronger community in Athens,” Williams said. “It made things even better.”

The event began with a presentation by John Glazer, a member of the Voinovich School’s professional staff in entrepreneurship and regional development. Defining social innovation as “the theory of social change,” Glazer told the more than 50 students, faculty, staff, and community leaders in attendance that traditional innovation cannot stand alone any longer.

Glazer touted the idea creation aspect of innovation, but warned that “our poverty is because we don’t know what to do with all of these ideas we have; we need funding and execution,” Glazer said.

Black followed Glazer, explaining the process of creating this event with her capstone class. The forum aspect of the conference was the critical part for her and her class, something they visualized as “coming up with new ideas through talking and listening.”

The presentations were followed by the forum. The participants were divided into groups of about seven each and given questions to discuss, including the root cause of hunger, the personal and collective actions that can be done to decrease food insecurity, and ideas for follow-up projects.

Among the community leaders participating in the forum were Bob Fedyski of Rural Action, Athens City Schools' Assistant Superintendent Tom Gibbs, Chris Linscott of Good Works, Sherri Oliver of Live Healthy Appalachia, Erik Peterson of Community Food Initiatives, Chris MacNeal of the Southeastern Ohio Regional Food Bank and Kerri Shaw, field education instructor in the University's Department of Social and Public Health.

Williams said that multiple future projects and partnerships were discussed, including a partnership with Good Works to create a garden in Chauncey, a program at Bobcat Student Orientation explaining food insecurity in southeast Ohio, and an expansion of the swipe donation program through Ohio University’s Culinary Services.

Ben Fitchett, a senior communications studies major from Black’s capstone class, took notes during the table discussions. Although he does not plan to go into a food insecurity-related field, Fitchett said the forum “definitely impacted the way I think about Athens. It’s a community – not just Court Street.”

Although Got Food? was the first conference of its kind, Williams hopes that it will not be the last. Williams hopes to continue these events, saying she’s considering sustainable agriculture for the next conference.

“[The forums] are special because there is a follow-up that creates action,” she said. “With speakers, you’re just being inspired.”


I'll only shortly react to this since it's a bit off the Monza topic, but I want to show my point of view on racing in general. I disagree that Verstappen gave room on the inside and thus had no need to give room on the outside. Leclerc was far enough alongside to be entitled the space, before the door was shut on him. Same here in Monza, Hamilton was far enough alongside to be given a car's width of space and if the black/white flag was available in Austria, I am fairly sure they would have applied it to Verstappen too (which means a warning would have been given). I don't really know why the drivers nowadays think they can "own" a corner by having the inside line or the racing line, or by the virtue of "being ahead". Those unwritten rules are absolute nonsense in my opinion.

First of all the black/white flag has always been available. The moment has been reviewed after the race with resulting no further action. So that clearly tells that there was nothing wrong with the action of Verstappen.

But back to the bot hsituations. The big difference is the position of the defending car. leclerc / Verstappen, Leclerc was on the outside as he gave to much space. Leclerc should haven taken his loss and break and take the inside. There was plenty of space available. Only it looks it was not possible, but that's because we continue the line Leclerc was taking, keep staying on the outside and running out of the track. It was Leclerc driving into Verstappen and not the other way around. verstappen was in a position he didn't have to give space on that side anymore.

Leclerc vs Hamilton, Leclerc was defending on the inside, after he blocked Hamilton out of turn 3. Hamilton was afterwards partly passed Leclerc before leclerc passed by again and had a bit the lead before turn 4. But Here he moved roughly to the right a pushed Hamilton from the track, he didn't give him 1 car space. That they didn't touch was only because of Hamilton stearing to the grass to avoid contact. Otherwise it would have been an accident, that the FIA gave the black/white flag tells that it was not a professional move. The reason he was not getting a penalty was because there was no contact, bit weird, as the only reason there was no contact was because Hamilton avoided a crash by going of the track. Lost time, dirty tyres,so weak explanation of the FIA.

First of all the black/white flag has always been available. The moment has been reviewed after the race with resulting no further action. So that clearly tells that there was nothing wrong with the action of Verstappen.

It has always been there, but it was not really used anymore. If you read the news, you could have read that Michael Masi said he was reviving the flag as a sort of "yellow card" to give drivers more knowledge on what is allowed and what not, without directly penalizing them. So yes, it was always there, but they have only started to really use it again since the Belgian Grand Prix. Anyways, the "warning" was given in an instant, and it took them multiple hours to come to the conclusion that Verstappen didn't get a penalty. If he really didn't do anything wrong, they wouldn't have taken that long.

But back to the bot hsituations. The big difference is the position of the defending car. leclerc / Verstappen, Leclerc was on the outside as he gave to much space. Leclerc should haven taken his loss and break and take the inside. There was plenty of space available. Only it looks it was not possible, but that's because we continue the line Leclerc was taking, keep staying on the outside and running out of the track. It was Leclerc driving into Verstappen and not the other way around. verstappen was in a position he didn't have to give space on that side anymore.

Why is Leclerc not allowed to go on the outside? Because you decide that beforehand? He had the speed and the overlap, that's the whole point I am trying to make. You are saying Leclerc isn't allowed to overtake Verstappen back around the outside, while Verstappen didn't block the outside off yet. If Verstappen was there, there was no room for Leclerc to get on his outside in the first place. Why didn't he have to give space? That's exactly what I don't like about racing nowadays. Drivers (and especially newer fans as well) think that a driver can claim the space. That is in fact the only point I am trying to make. Both moves were wrong in my opinion and didn't result in a penalty. On the one hand, we should be happy that penalties aren't easily given, but on the other hand I would love to see some more respect between drivers on track.

It's exactly the other way around, Martti. I'm talking about being stricter on defensive moves. What we learned today is that you shouldn't try overtaking the way Albon and Hamilton did, because the guy ahead can simply push you off the track. The only thing you end up with is dirty tyres, loss of several positions (Albon) and possible a damaged car. So it is much better to just stay behind and go to the finish.

The current policy discourages overtaking. Handing out some penalties for overly aggressive defending would encourage it.

I am the biggest tifoso of Ferrari, and i'm in paradise for Carletto's victory.

Yet i totally agree with this statement, Leclerc's defence was too much, there's a difference between defending aggressively and pushing your opponent off the track. Allowing this kind of moves discourages overtaking.

am the biggest tifoso of Ferrari, and i'm in paradise for Carletto's victory.

Me too, Alessio

But before I agree to any statements , I want to see the bigger picture , not just one particularity ... because , on one side , Ham was talking about seeing some consistency from the stewards until this event ( thinking at Montreal and forgetting about Austria where he didn’t have anything to lose/win) , But on the other side , a super talented and valuable youngster like Charles should come to a double loser position in all this equation , no matter the facts... and the fact is that the only way for the stewards to show any consistency at all ,exactly what Ham wishes for , is to keep a balance/consistency in line of judgement between Austria and Monza , as well for the rest of the season , and then draw a line and take measures and rules to apply for the seasons to come

You don’t spoil a huge talent like Max , allowing him, in over 50% of the s..t he made in order to find his own line of progress, to get away with it , and then penalize another real talent for the future as Charles by braking consistency when Ham and fans wish for it , even if it proves they do have a strong position on this case

Why is Leclerc not allowed to go on the outside? Because you decide that beforehand?

Where do I say he was not allowed, he is allowed to do what ever he wants. He is just in a losing position there, a position from where he can't claim anything. He can try to overtake from the outside, but with the risk there is no space and that he has to go off the track! I do like racing when the drivers go to the limit and sometimes over, but when it comes like the Leclerc Hamilton situation I think it's getting close to the edge. I support the black/white flag for it though. I think it was a perfect solution, just surprised that Leclerc didn't get a penalty for the multiple moving, blocking and corner cutting after the black/white flag. To me it doesn't matter who would have won the race. It's just a weird call from the stewards to completely ignore these actions.

Summary; Big fan of Black/white flag, 100% support that, as we want drivers to race and not being bitching about everything. So given them a yellow card principle is perfect. Just two yellow cards is still a red card, what is a penalty..

Summary; Big fan of Black/white flag, 100% support that, as we want drivers to race and not being bitching about everything. So given them a yellow card principle is perfect. Just two yellow cards is still a red card, what is a penalty..

Where do I say he was not allowed, he is allowed to do what ever he wants. He is just in a losing position there, a position from where he can't claim anything. He can try to overtake from the outside, but with the risk there is no space and that he has to go off the track! I do like racing when the drivers go to the limit and sometimes over, but when it comes like the Leclerc Hamilton situation I think it's getting close to the edge. I support the black/white flag for it though. I think it was a perfect solution, just surprised that Leclerc didn't get a penalty for the multiple moving, blocking and corner cutting after the black/white flag. To me it doesn't matter who would have won the race. It's just a weird call from the stewards to completely ignore these actions.

Summary; Big fan of Black/white flag, 100% support that, as we want drivers to race and not being bitching about everything. So given them a yellow card principle is perfect. Just two yellow cards is still a red card, what is a penalty..

Okay, you didn't say he's not allowed, but you are saying Verstappen is allowed to run him out of road, despite the fact he was way alongside. He wasn't in a losing position, as he made exactly the same move the lap before and made it stick - even though he had a bigger disadvantage that lap. There was no reason for him not to try it again. I like it too when drivers go to the limit, but to me the limit is that you keep space for the other car once he gets alongside. I do understand that that is not the rules F1 follow at the moment, but I do think it's what they should do. That is what I am trying to say.

Also, the only thing I think Leclerc could have been penalized for after the "yellow card", is the corner cut. Honestly I think they let it slip because 1. Italian GP and 2. Vettel/Canada incident. While Leclerc was "moving multiple times" on the straight to break the slipstream, I think he was doing it safely, leaving space at either side of the road while moving and only going back to the racing line for the braking zone. The sporting regulations in F1 don't involve exact rules on what is allowed and what not. If they thought it was unfair, they would have given the black-white flag way earlier. I also don't think he did any wrong blocking. There was one moment in Curva Grande, but I think that was mainly caused by the fact they were going through a corner.

Anyways, I agree with you about the summary, but with Martti as well. :)

Edit: btw I don't necessarily think your opinion is wrong, I am mainly disagreeing with the way F1 is currently look at racing and what is fair and what is not. I would personally love to see it change a bit with more respect for each other and more respect for the white lines as well. :)


Pavilion Kuala Lumpur Reviews

As one of the most prestigious shopping malls in Asia, Pavilion is not only popular for its size, retail boutigues, impressive decorations and delicious food court, it's also the 'home' for the United Bears temporarily.

If you're thinking of going for a holiday but can't think of which country to visit, why not 'ask' the bears? I 'discovered' many country names which I never know off by paying these bears a visit.

Just in front of the entrance of Pavilion, near where these bears stood, there is a cover-up dome that looks like a few igloos combined together. In there, you'll find a 15-mins live introduction of Malaysian dance. I wouldn't recommend you to come here on purpose, but if you're around this area, why not just hop in to take some pictures of the Malaysian traditional costumes? Otherwise, there's really no reason to come. Anyway it's free and you'll be given a small bottle of mineral water upon entry.


Q:

Finding the period in a Markov Chains related situation.

Let there be two vases with total 4 balls in them. At every step a ball is chosen with a uniform probability to every ball, and is put in the other vase. Let us consider the number of balls in vase $a$ as the possible states. What is the period of the chain?
What I did is: There are five state that I will denote as $s_0,s_1,s_2,s_3,s_4$, $s_i$=$i$ balls in vase a. I can go from $s_i$ to $s_{i+1}$ or $s_{i-1}$(if $i\ne 0$). I can't however go from $s_{i}$ to $s_{i+k}$ or $s_{i-k}$ if $k>1$. The shortest orbit number of steps from one state to itself is 2. Therefore, I have to check if there are orbits with odd number of steps. I don't know how to show that. Another thing: I have to take gcd of the all the orbits lengths, but is there another condition required for this gcd to actually be the period? Like, a connection between any pair of states? I would appreciate your help.

A:

If you draw the graphical representation of this Markov chain, you get $s_0 \leftrightarrow s_1 \leftrightarrow s_2 \leftrightarrow s_3 \leftrightarrow s_4$. This is a bipartite graph, since there is no possible transition within $s_0, s_2, s_4$ or $s_1, s_3$ (including e.g. $s_1 \rightarrow s_1$).
Consequently, the period of the chain is 2.


Brenda Patton

PUBLIC AFFAIRS

My power 9

Moving Naturally is my favorite Power 9. I love being outdoors and kayaking on the Trinity River. It's a relaxing way to Downshift while incorporating some physical activity.

Brenda’s prior experience as Senior Project Development with the Fort Worth Independent School District and with Fort Worth Sister Cities International make her a good fit for Blue Zones Project. She has been heavily involved in the Fort Worth community in such organizations as Steer Fort Worth, Catholic Charities YPO, Mental Health Connections, Leadership Fort Worth Leading Edge, Hispanic Women’s Network, and Susan G. Komen Race for the Cure. Brenda holds a degree in Political Science, with an emphasis in International Relations, from Texas Christian University. She is bilingual and an advocate for pet rescue.


Remi Alfalah

Prince Jackson clearly knows how to compartmentalize his life ... because he hit the town Tuesday night in low fashion, attending the premiere of True Blood, Season 6.The 16-year-old and his GF,… READ MORE >

Prince Jackson is stepping up his game -- after first being seen with his new Kuwaiti princess girlfriend out for a daytime bowling date, he then graduated to a Hollywood dinner date ... and now… READ MORE >

Prince Jackson stepped up his royal pimp game -- taking his Kuwaiti princess girlfriend out for a fancy Hollywood dinner ... and all signs point to the princess being impressed.Michael Jackson's… READ MORE >


Novel therapeutic strategies for endometriosis: a pathophysiological perspective.
It has previously been considered that the therapeutic effects of gonadotropin-releasing hormone (GnRH) analogues on endometriosis could be explained by the suppression of estrogen levels due to pituitary downregulation; however, recent research on the pathogenesis of endometriosis suggests that these effects may be exerted by multiple mechanisms. These include the inhibition of ovulation, which results in a reduction in the exposure of endometriotic lesions to midkine, a growth factor present in ovarian follicular fluid that is thought to be involved in the proliferation of endometriotic cells and development of endometriosis. Also the inhibition of bleeding induced by GnRH analogue therapy can reduce the exposure of endometriotic lesions to thrombin, which is produced in the process of coagulation. Thrombin and its specific receptor, protease-activated receptor 1 (PAR1), are important factors in inflammation and cell proliferation and may be involved in the pathophysiology of endometriosis. Abnormal uterine contractions have been observed in women with endometriosis, and it is thought that the resulting mechanical stretch might stimulate the production of pro-inflammatory mediators, such as interleukin-8 (IL-8), as has been observed in studies with endometrial stromal cell cultures. The inhibition of uterine contractions by GnRH analogue therapy, in particular during menstruation, would block the mechanical stress on the endometrium and ultimately inhibit the development of endometriosis. Alongside the recent revolutionary progress in T-cell immunology, it has been argued that the development of endometriosis is associated with an abnormal T-cell function, and the existence of a 'T-cell immune network' is hypothesized to explain the etiology of the disease.


September 10, 2008

Home Alone & Pigs In The Trailer

As of today everyone has departed the farm to return home. It’s quiet. Not deafening quiet, but good quiet. Normally takes me a day or two to adjust to being home alone after a family gathering. Not so much this time. Sister and great niece stayed an extra day to help me re-group and clean up the house. I appreciated their help greatly.

The past week was fun, eventful, plus a tad bit overwhelming. Between recovering from our houseguests, our big fat Irish family gathering, the Celtic Festival and the farm…I feel completely and totally exhausted.

So much was jam packed into the last week, especially the weekend. It’s all rather a blur right now.

As I mentioned early on, sister came down Tuesday for a Girls’ day out (Weds.). After the morning farm routine, we were able to spend most of the day in town shopping and pampering ourselves. The pampering part was with our hair stylist. We booked most of her afternoon (yeppers it took most of the afternoon for her to beautify us). We definitely kept her busy with my perm and sisters high/low lights; both of us had a trim and brow wax. Not sure we look better, but we definitely feel better. We also indulged ourselves that evening with pizza (carry out) while watching "chick flicks" in our jammies. It was an enjoyable relaxing beginning.

The better half rolled in early. Not expecting him home ‘til Thursday evening I about had a stroke when the dogs’ barking to the sound of someone trying to come in the front door woke me up at 3:30 a.m. Luckily I had forgotten to pick up the baseball bat when I groggily rushed into the living room to see what was going on or the SURPRISE would have been for him, across his head.

One bonus during this weekend - the pigs went to butcher. Yeah!Wish you could have been here or I would have remembered to take the camera out for their loading. Normally we don’t have a bit of trouble out of the pigs. This year it was a free for all pig fight. Just crazy I tell you.Our normal method of loading pigs is to back the livestock trailer up to the pigpen, create a so-called chute, so the pigs can be herded up and onto the trailer. The better half can normally persuade them to walk up and load with little difficulty while I am standing in the trailer with feed calling "Hereee piggiees".A neighbor volunteered to come help, which was extremely nice since I was going to be preoccupied with preparing for the festival and family gathering. The neighbor was to stand in for me.Shortly after they began their attempt at loading the pigs, I hear the guys bellowing my name. Seems they were having problems with the pigs not co-operating. The guys needed more help. It wasn’t going to be me. I called another neighbor (one we were raising a pig for) to come help. He showed up about 10 minutes later (7:30 a.m.) morning coffee in hand, looking as if my call was his reason for getting out of bed.

A short bit later I heard the pigs screaming so I went back out. It was a sorry sight. Visualize 3 grown men falling over each other trying to tackle pigs that didn’t want to be tackled. You would think 3 grown men weighing a combined total of roughly 600 pounds could load 5 350-pound pigs. Guess not.The pigs were scared to death, trying to run over each other to get out. Trying to run over the guys to get out. Trying to run out through the sides of the cattle panel chute, out through the fence, out through anything, just wanting to go anywhere but in the trailer.

I finally told, well screamed STOP! They did. I ask what the problem was. The problem seemed to be that the trailer was a bit too high for the pigs to easily step up into. They were having to lift the front end of the pigs on to the trailer then shove the ham end of the pig up and in. The pigs were not having anything to do with being touched by sweating, cursing, angry men. My suggestion of putting food in the trailer so they would step up by themselves fell on deaf ears.There was also another problem that I saw that they didn’t. Our pigs are not use to being rough housed, smacked, grabbed or yelled at. They were grabbing the pig’s ear to pull the pig up and into the trailer. Come on, think about this! If you hurt the critter it is going to scream, that in turn upsets all other pigs, they in turn scream and run. I tried to explain this, which also fell on deaf ears. Any hoo, I also suggested one man on each side of the front of the pig and lift up by front leg. In their opinion my idea wouldn’t work (which really should have). Nothing I said seemed to be appreciated or useful. They continued to struggle, push, shove, grunt, huff and puff (the men not the pigs) and managed to load 4 of 5 pigs. The last pig to load was the heaviest and largest.

I, if anything, know our animals. So while they (men and pig) were resting and getting a second wind to finish the task at hand, discussing what to do, how to do it and what to build to help the pig step up. I ran to the house, grabbed a box of Fruit Loops (cereal) and ran back out. I threw a handful of Loops in the floor of the trailer in front of the last pig snoot. You see our pigs like sweet things. Low and behold hefty, huge last pig standing, walked up and into the trailer to eat his morning Fruit Loops.